Codemirror-在字符串中查找叠加层的字符位置

问题描述 投票:1回答:1

我正在使用带有自定义叠加层的Codemirror 5,该叠加层突出显示某些文本(类似于搜索/替换演示)。

[使用cm.eachLine()遍历所有字符串时,如何在一行中找到自定义叠加层的开始和结束字符位置?

最终,我想设置一个装订线标记,并附加一个单击事件,它将修改突出显示的文本。这听起来相对简单,但是我找不到一种简单的方法来找到字符串中叠加层的字符位置。

javascript codemirror
1个回答
1
投票

好的,它不使用editor.eachLine()功能,但是可以使用。

首先,找到您的每个自定义范围。遍历每个跨度,找到行号,然后找到一个字符数组,这将帮助我们找到字符位置为lineView。继续,将startend值定义为0。现在循环遍历每个lineView项目,如果start和end为0,则该项目是一个对象,该项目的父节点存在,并且该跨度等于该项目的父节点,设置start和end变量。在文本对象后面的两个项目中找到了起始变量。

var spans = $("span.cm-custom-overlay", editor.display.lineDiv);
$.each(spans, function () {
    var span = $(this);
    var lineNumber = span.closest(".CodeMirror-line").closest("div[style]").index();
    var lineView = editor.display.renderedView[lineNumber].measure.map;
    var start = 0;
    var end = 0;

    for (var i in lineView) {
        if (
            !start &&
            !end &&
            typeof lineView[i] == "object" &&
            lineView[i].parentNode &&
            span[0] == lineView[i].parentNode
        ) {
            start = lineView[i - 2];
            end = lineView[i - 1];
        }
    }

    console.log("start: ", start, " end: ", end);
});
© www.soinside.com 2019 - 2024. All rights reserved.