在Ace编辑器HTML脚本中查找所有类和id名称

Find all class and id names in an Ace Editor HTML script

本文关键字:id 名称 查找 编辑器 Ace HTML 脚本      更新时间:2023-09-26

我要做的事情:收集Ace编辑器html脚本中的所有类和id名称。

现在,我的计划是检测用户更改(.on('change'...)),并使用光标位置获取当前令牌。如果令牌是非"未引用"的"属性值"类型,我想遍历以前的令牌,以找到该"attribute value"所属的"attribute-name"类型令牌,并确定它是类还是id(我不能只检测"attributes-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合作有更好的想法,那将是非常受欢迎的。

您可以使用获得TokenIterator

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

参见https://github.com/ajaxorg/ace/blob/master/lib/ace/mode/folding/xml.js#L38以获取其用法的示例。