jQuery заменить строку в содержимом разрывов элементов - PullRequest
1 голос
/ 06 апреля 2020

Я создаю надстройку на основе jQuery. Работает нормально! ... пока что

terms - массив, содержащий слова, которые будут отмечены на сайте. Слова, помеченные как сохраненные в диапазоне со стилем.

При наведении курсора на область отображается всплывающая подсказка.

Это функция для пометки слов:

function mark_terms(callback){

  terms.forEach(function(entry) {

    $('#tooltipped_area :not(script)').contents().filter(function() {

       return this.nodeType === 3;

     }).replaceWith(function() {

       regex = new RegExp('\\s\\b' + entry + '\\b\\s', "gi");

       return this.nodeValue.replace(regex, ' <span class="define" onMouseOver="show_tooltip(this.id)" onMouseOut="clear_timer()" id="' + entry + '">' + entry + '</span> ');

     });

      callback();

  });
}

Пока все отлично работает. Но у меня есть две проблемы:

  1. Сайт, на котором это работает, содержит несколько кодовых блоков. Например:
#include <Morse.h>

Моим методом ... также можно заменить строку <Morse.h>, чтобы она была невидимой после замены. Я думаю, потому что это выглядит как "html элемент"

Как я могу это исправить?


Вторая проблема:

<span class="define" onMouseOver="show_tooltip(this.id)" onMouseOut="clear_timer()" id="' + entry + '">' + entry + '</span>

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


>' + entry + '<

Превращает старое слово, например HelLoWoRld, в HelloWorld. (HelloWorld - это «заголовок», хранящийся в БД, который показан во всплывающей подсказке)

Я бы хотел что-то вроде этого: 1046 *

Понятия не имею. Надеюсь, ты сможешь мне помочь. :) Заранее спасибо.

...