【问题标题】:Find all class and id names in an Ace Editor HTML script在 Ace Editor HTML 脚本中查找所有类和 id 名称
【发布时间】:2016-08-02 02:32:20
【问题描述】:

我正在尝试做的事情: 在 Ace Editor html 脚本中收集所有类和 id 名称。

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

除了获取以前的令牌之外,我什么都能做。我查阅了一些文档,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 一起解决这个问题有任何更好的想法,我们将非常欢迎。

【问题讨论】:

    标签: javascript ace-editor


    【解决方案1】:

    你可以通过使用获取TokenIterator

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

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

    【讨论】:

    • 谢谢,我搞定了。我发现我需要这样做:var iter = new TokenIterator( editor.session, 0, 0 );。不幸的是,我发现它对我没有多大用处,因为 Ace 每次都重新制作它的令牌,所以我每次都必须重新构建我的数据,再次循环遍历令牌。
    • 为什么令牌的再生是个问题?它只重新生成因编辑而更改的令牌
    • 我希望能够存储一个令牌并继续检查它以查看其值是否已更改。如果令牌在每次更改时都被销毁,我不能这样做。每次发生更改以检索令牌时,我都必须评估整个文档。也许有一些方法可以检测新令牌的创建或旧令牌的破坏,但我不知道。它只是消除了我希望摆脱使用令牌的大部分优势。如果没有其他选择,我会这样做,否则可能不值得。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 2015-12-16
    相关资源
    最近更新 更多