Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Сравнение строк (https://javascript.ru/forum/events/84551-sravnenie-strok.html)

ureech 12.10.2022 18:21

Сравнение строк
 
Привет. Пытаюсь сделать что то типа быстрого редактирования. Выделяю текст в статье, вывожу выделенную строку в текстовое поле, редактирую и отправляю на сервер. Там обрабатываю и пишу в базу. Ту строку, что редактировал оборачиваю в <span class="no-moder"></span> и она становится подсвеченной в статье. Если строка обёрнута в этот класс(может и в другой), то редактировать её нельзя.Теперь собственно вопрос. Как организовать проверку. Начал так.

<a href="javascript:;" onclick="get_selected_text(\'' + text + '\')">Получить выделенный текст</a></span>

function get_selected_text(c) {

var span = document.querySelectorAll('.no-moder');
    var select = window.getSelection();
    sellected = select.toString();
    var word = [];
    let res = [];

//тут проверяю есть ли выделенная строка в уже выделенных
    for (let i = 0; i < span.length; i++) {
        word = ($(span)[i]).firstChild.data;
        res = word.includes(sellected);       
    }

// тут отправка в текстовое поле

if (getSelection().type != 'None') {
.....
}
}


И тут я застрял. В принципе я мог поместить в цикл условие,что ниже и там что то намудрить, но тут подумал. Например у меня выделено слово Вася, но ведь в тексте может быть не одно слово Вася, как мне проверить, что новое Вася не есть уже выделенное Вася?

Aetae 12.10.2022 19:06

Для этого есть специальный метод у селекшена, надо проверять сами узлы а не текст:
let isAlreadySelected = false;

for (let i = 0; i < span.length; i++) {
  if (select.containsNode(span[i], true)) {
    isAlreadySelected = true;
    break;     
  }
}

ureech 12.10.2022 19:16

Ясно.Спасибо).


Часовой пояс GMT +3, время: 21:57.