在Ace Editor HTML脚本中查找所有类和id名称

时间:2016-08-02 02:32:20

标签: javascript ace-editor

我正在尝试做什么: 在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有更好的想法,那将是非常受欢迎的。

1 个答案:

答案 0 :(得分:0)

您可以使用

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

请参阅https://github.com/ajaxorg/ace/blob/master/lib/ace/mode/folding/xml.js#L38了解其用法示例。