2016-08-02 73 views
0

我在做什么: 在Ace Editor html脚本中收集所有类和id名称。在Ace Editor HTML脚本中查找所有类和id名称

现在我的计划是检测用户更改(.on('change'...))并使用光标位置获取当前令牌。如果令牌不是'未加引用'的'属性值'类型,我想通过先前的令牌迭代回来,以找到'属性值'所属的'属性名'类型令牌,并确定它是否是一个类或id(我不能检测'attribute-name'标记的创建,因为用户可以在不更改名称的情况下返回并更改属性值,并且需要检测这些更改)。

我可以做任何事情,除了获得以前的令牌。我查了一些文档,TokenIterator应该可以做到这一点,但是当我尝试做类似var iter = new TokeIterator()的操作时,我的控制台说TokenIterator未定义。我搜遍谷歌一遍又一遍,但没有找到任何结果。如果真相在那里,我显然不会用正确的词来找到它,但它们是我得到的唯一字。

是否有某种方式构建到Ace以迭代令牌?我知道我在控制台登录时看不到编辑器实例对象上的所有属性和方法,因为我可以在脚本中使用我无法在该日志中看到的方法。有没有那样做我想要的?

如果不是,我该如何加载TokenIterator?我想类似的东西去,当我试图用SnippetManager而回它原来其实我不得不这样做,使其工作:

var tillPageLoaded = setInterval(function() { // Makes sure page doesn't load forever on startup 
    if(document.readyState === 'complete') { 
     clearInterval(tillPageLoaded); 
     ace.config.loadModule('ace/ext/language_tools', function() { 
      editor.insertSnippet(myString); 
     }); 
    } 
}, 5); 

这是同样的情况?如果是这样,.loadModules(...)需要什么?我需要在某处引用脚本吗?是否需要以其他方式加载?

是否有内置功能的Ace已经可以做我想要的一切了?

除此之外,如果任何人有更好的想法如何去与Ace这个,这些将是非常受欢迎的。

回答

0

您可以通过使用

var TokenIterator = ace.require("ace/token_iterator").TokenIterator 

https://github.com/ajaxorg/ace/blob/master/lib/ace/mode/folding/xml.js#L38其用法的范例中得到TokenIterator。

+0

谢谢,我得到了那个工作。我发现我然后需要做:'var iter = new TokenIterator(editor.session,0,0);'。不幸的是,我发现它对我来说没有太大的用处,因为Ace在每次都会重新创建它的标记,所以我必须每次都重新构建数据,然后再次循环使用标记。 – knod

+0

为什么重新生成令牌有问题?它只会重新生成由于编辑而发生更改的令牌 –

+0

我希望能够存储令牌并继续检查它以查看其值是否已更改。如果令牌在每次更改时都被销毁,我不能这样做。每次发生更改以检索令牌时,我都必须评估整个文档。也许有一些方法可以检测到新的令牌的创建或破坏旧的令牌,但我不知道它。它只消除了我希望从令牌中获得的大部分好处。如果没有别的选择,我会去做,但否则它可能不值得。 – knod