【问题标题】:how to retrieve a line of text from ACE editor?如何从 ACE 编辑器中检索一行文本?
【发布时间】:2014-12-15 20:21:47
【问题描述】:

我在我的网站中集成了 ACE 编辑器。我想检索某一行中的文本。我搜索并找到了ThisThis。但不幸的是,我无法理解这些,因为我是这个主题的新手。 谁能举个例子? 我使用以下代码将行添加到数组中。

var line = document.getElementsByClassName("ace_line");

有没有类似的方法

line[count].getValue

哪个可以返回该行文本的字符串?

【问题讨论】:

    标签: javascript ace-editor text-extraction


    【解决方案1】:

    你需要打电话

    line0 = editor.session.getLine(0);
    

    使用getElementsByClassName("ace_line") 或类似的方法将不起作用,因为

    1. ace 仅为可见线创建 DOM 元素。
    2. DOM 元素的文本内容与文档中的文本不同,因为制表符和其他一些字符被空格替换。

    【讨论】:

    • 他问如何从 NodeList 中获取它,虽然他可能 问错了问题,但这不是他问题的答案。我同意,他当然应该这样做,但他链接到的答案与他的问题中已有的答案相同。
    • @ThisaruGuruge 这个答案似乎有效,尝试滚动编辑器,行会出错。
    • @someDoge 这不一样,这个答案解释了为什么 NodeList 不能工作。你的答案是错误的,因为它建议他得到错误行的错误值。
    • @someDoge 我只是想解释一下 1. 他不能在节点列表中包含所有行,2. lineNode.textContent 与文档中的行不同。
    • 可以拥有 NodeList 中的所有行,但他可能没有 ;)。无论如何,我无法删除已接受的答案。 @ThisaruGuruge 请接受这个或另一个答案。
    【解决方案2】:

    line[count] 已经返回该行的 DOM 元素。因此,您所要做的就是从该元素中提取纯文本。如果你使用 jQuery,你可以这样做:

    以获取第一行文本为例(line[0])

    var lineText = line[0].text();
    

    如果你不使用 jQuery 并且想在 javascipt 中这样做:

    var lineText = line[0].innerHTML.replace(/<[^>]*>/g, "");
    

    【讨论】:

    • 你在用那个replace做什么?您想要innerTexttextContent // textContent 以实现兼容性。这是一个节点列表
    • 我在哪里说过 getElementsByTagName?
    • @SamBattat 如果您阅读了他的问题...无论如何,这不起作用,并且在新接受的答案的 cmets 中进行了解释。
    • @someDoge 我确实忘记包含 innerHTML(请参阅更新)。这可行,但您的解决方案是理想的解决方案
    • @SamBattat 嗯,这实际上完全是另一回事。我删除了我的答案,因为这种方法实际上不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    相关资源
    最近更新 更多