Хорошо, здесь не используется функция editor.eachLine()
, но она работает.
Сначала найдите каждый из ваших настраиваемых промежутков. L oop через каждый промежуток находит номер полотна, а затем массив символов, который поможет нам найти позиции символов как lineView
. Go вперед и определите свои значения start
и end
как 0
. Теперь l oop через каждый элемент 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);
});