Замена текста ссылкой в ​​jQuery - PullRequest
0 голосов
/ 30 мая 2010

Я пытаюсь заменить небольшую часть текста в большом документе HTML своим собственным элементом, который я создаю на лету.

Текст может быть огромным массивом текста, HTML, изображений, чего угодно, и я хочу найти первую (или всю) позицию определенной строки и заменить ее элементом, который я создаю используя $('< span>').

Использование простого text.replace('the string', $('< span>')); не помогает (у меня осталось [object Object], а не фактический < span>, который я хочу.

Причина, по которой я не просто внедряю прямой HTML, заключается в том, что я хочу сохранить все связи, связанные с объектом, который я создаю. выполнение замены с помощью пользовательского идентификатора, а затем присоединение привязок к идентификатору после изменения HTML-кода выглядит немного грязным.

Спасибо за помощь! :)

Ответы [ 3 ]

1 голос
/ 30 мая 2010

Вы, скорее всего, захотите плагин выделения и просто измените ссылку, если хотите.

http://www.unwrongest.com/projects/highlight/

1 голос
/ 30 мая 2010

Для простого решения

text.replace('the string', '<span></span>');

Если вам нужен более сложный элемент, вы должны добавить элемент в нужную вам позицию.

$("<span/>").appendTo(element);

Как и в вашем примере, он заменяет текст на object.toString()

1 голос
/ 30 мая 2010

Это не так просто. После того, как вы выбрали text(), вы получили простую строку без информации об узле элемента, поэтому ее замена не изменит HTML DOM вообще.

Что вам нужно сделать, так это искать каждый текстовый узел внутри дерева один за другим. И, к сожалению, jQuery не очень помогает при работе с текстовыми узлами.

Вы можете использовать функцию findText из этого вопроса . Это использование заменит каждую «строку» пустой <span>:

findText(document.body, /the string/g, function(node, match) {
    var span= document.createElement('span');
    node.splitText(match.index+match[0].length);
    node.data= node.data.slice(0, match.index);
    node.parentNode.insertBefore(span, node.nextSibling);
});

(Если вам нужно найти текст в разных текстовых узлах и элементах, это гораздо более сложное предложение .)

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