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

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

我正在尝试做的事情: 在 Ace 编辑器 html 脚本中收集所有 class 和 ID 名称。

现在我的计划是检测用户更改 (.on('change'...)) 并使用光标位置获取当前令牌。如果令牌不是 'unquoted' 'attribute-value' 类型,我想遍历以前的令牌以找到 'attribute-value' 所属的 'attribute-name' 类型令牌并确定是否它是一个 class 或 id(我不能只检测 'attribute-name' 令牌的创建,因为用户可以稍后返回并更改属性值而不更改名称,我需要检测这些变化)。

除了获取以前的令牌,我可以做任何事情。我查阅了一些文档,TokenIterator 应该能够做到这一点,但是当我尝试执行类似 var iter = new TokeIterator() 的操作时,我的控制台显示 TokenIterator 未定义。我搜索了 google 一遍又一遍,但没有找到任何结果。如果真相大白,我显然没有使用正确的词来找到它,但它们是我仅有的词。

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