【问题标题】:ace editor find code snippet王牌编辑器查找代码片段
【发布时间】:2015-02-16 04:31:17
【问题描述】:

我已经设置了 ace 来渲染 html 代码,比如说他渲染了以下代码

    1 <html>
    2 <body>
    3 <table>
    4 <tr>
    5 <td>
    6 test
    7 </td>

我想获取给定代码片段的行号,例如,如果我搜索

"<html><body><table><tr><td>" 

我想移动光标并突出显示第 6 行。 不幸的是 ace 内置的 find 函数似乎只能找到同一行的代码,所以

ace.find('<html>', options) 

工作并突出显示第 1 行,但

ace.find('<html><body>', options) 

什么也没找到。

您能解释一下原因或给我一个解决方法吗? 在此先感谢 ;)

【问题讨论】:

    标签: javascript ace-editor


    【解决方案1】:

    如果&lt;html&gt;&lt;body&gt; 位于不同的行,您需要搜索ace.find('&lt;html&gt;\n&lt;body&gt;', options)(与\n

    另一种方法是使用正则表达式在editor.getValue() 字符串中找到您想要的偏移量,然后使用

    pos = session.doc.indexToPosition(100)
    session.selection.moveToPosition(pos)
    

    将光标移动到它

    【讨论】:

    • 我的问题是我不知道它是否在 2 个不同的行上,我只知道我想搜索 (') 而且 `ace.find('\n', options) 也不起作用
    • 如果你想搜索&lt;html&gt;&lt;body&gt;,但也允许它们之间有其他字符,那么你不是在搜索&lt;html&gt;&lt;body&gt;,而是在搜索不同的东西。例如。正则表达式 &lt;html&gt;\s*&lt;body&gt; 或者您正在搜索 &lt;html[^&gt;]+&gt;\s*&lt;body[^&gt;]+&gt;。无论如何,您需要决定要搜索什么,才有机会找到它。
    • 我明白你的意思,也许我误导你说我想搜索句子&lt;html&gt;&lt;body&gt;事实上我已经知道编辑器内的代码包含并以这两个标签开头(代码在编辑器里面来自一个像&lt;html&gt;&lt;body&gt;...这样的句子,我只是想找到一种方法来选择它并突出显示他的后正文
    • 那你只能搜索&lt;body&gt; 并在它后面设置光标吧?
    • 事实上,我必须实现一种反向所见即所得的编辑器,当您单击 html 元素时,ace 中相应的行突出显示,因此对于正文,您是对的,但是,例如,如果用户单击在桌子上的 tr 上,它变得更加复杂(html 可以有很多表,很多行,......)所以我做了一个函数,给我一个字符串,其中包含用户单击的 html 元素之前的所有 html 代码,并且我真的想选择从位置 0 开始并包含我的 ''htmlstring'' 中的所有标签的所有代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多