Codemirror - найти позицию символа оверлея в строке - PullRequest
1 голос
/ 26 мая 2020

Я использую codemirror 5 с настраиваемым оверлеем, который выделяет определенный текст (аналогично поиску / замене в демо).

Как я могу найти положение начального и конечного символа пользовательского оверлея внутри строки при повторении всех строк с помощью cm.eachLine()?

В конечном итоге я хочу установить маркер желоба и прикрепите событие щелчка, которое изменит выделенный текст. Звучит относительно просто, однако я не могу найти простой способ найти положение символа наложения в строке.

1 Ответ

1 голос
/ 04 июня 2020

Хорошо, здесь не используется функция 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);
});
...