我正在使用Codemirror 5.3。
我在混合模式文档中标记与html匹配的标记,以突出显示开始和结束标记-效果很好。 (https://codemirror.net/demo/matchtags.html)
我试图捕获标记之间的内容(在我的情况下,使用上下文菜单操作,在标记上单击鼠标右键),以便将其发送给外部进程。
我使用var tm = doc.getAllMarks();
,因为我是标签匹配的而不是书签的,所以我几乎知道数组中只有两个项目。但是,据我所知,此返回的TextMarker数组不包含标记的{line, ch}
游标。
是否有适当的方法来获取标记的开始和结束位置-直接还是作为线条和字符位置?我能想到的最好的办法是迭代每个:
[].lines[0].parent.lines
并查看每个CodeMirror.Line实例是否都有一个
markedSpans
对象,该对象将为我提供行索引,然后使用[].lines[0].markedSpans[0].from
和[].lines[0].markedSpans[0].to
查找标记中字符的位置。然后使用doc.getRange
抓取内容并将其改编以进行处理...类似这样:var tm = doc.getAllMarks(),
lines = tm[0].lines[0].parent.lines,
range = {
from: { line: 0, ch: 0},
to: { line: 0, ch: 0 }
},
hack = 0,
textContent = "";
for (var i=0,j=lines.length;i<j;i++) {
if (lines[i].hasOwnProperty("markedSpans")) {
if (hack==0) { // sorry, i'm in a hurry
range.from.line = i;
range.from.ch = lines[i].markedSpans.from;
hack=1;
} else {
range.to.line = i;
range.to.ch = lines[i].markedSpans.to;
}
}
}
textContent = doc.getRange(range.from,range.to);
所有这些听起来似乎都是小故障,我正在寻找一种更好的方法。
最佳答案
您可以在.find()
返回的对象上调用markText
,它将返回标记的{from, to}
位置(如果清除了标记,则返回null
)。