我正在使用带有自定义叠加层的Codemirror 5,该叠加层突出显示某些文本(类似于搜索/替换演示)。
[使用cm.eachLine()
遍历所有字符串时,如何在一行中找到自定义叠加层的开始和结束字符位置?
最终,我想设置一个装订线标记,并附加一个单击事件,它将修改突出显示的文本。这听起来相对简单,但是我找不到一种简单的方法来找到字符串中叠加层的字符位置。
好的,它不使用editor.eachLine()
功能,但是可以使用。
首先,找到您的每个自定义范围。遍历每个跨度,找到行号,然后找到一个字符数组,这将帮助我们找到字符位置为lineView
。继续,将start
和end
值定义为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);
});