Regex, чтобы найти слово на странице, в том числе внутри тегов - PullRequest
0 голосов
/ 03 декабря 2009

Благодаря Chetan Sastry У меня есть этот код Regex для анализа моей страницы на предмет списка слов и добавления к ним ТМ.

var wordList = ["jQuery UI", "jQuery", "is"];
var regExp = new RegExp("\\b" + wordList.join("\\b|\\b") + "\\b", "g");
var $elem = $("#divWithText");
$elem.html($elem.html().replace(regExp, "$&™"));

Это регулярное выражение - почти то, что мне нужно. Однако со ссылкой, которая выглядит так:

<a href="/0/products/jQuery">jQuery</a>

В итоге добавляется TM к jQuery внутри href, а НЕ к тегам между ними.

Может кто-нибудь помочь с этим?

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

Ответы [ 4 ]

8 голосов
/ 03 декабря 2009

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

Реализация:

Делая это по-своему, вы не только рискуете непреднамеренно заменить фактический HTML, но также стираете все элементы DOM внутри целевого элемента и любые соответствующие обработчики событий.

1 голос
/ 03 декабря 2009

J-P связан с некоторыми хорошими утилитами для работы.

С прямым jQuery:

$elem
  .contents()
  .filter(function() {
    return this.nodeType == Node.TEXT_NODE;
  })
  .each(function(){
    $(this).text($(this).text().replace(regExp, "$&&trade;"));
  });

(СМ. Как выбрать текстовые узлы с помощью jQuery? )

0 голосов
/ 03 декабря 2009

Если вы пытаетесь заменить слова в ссылке, должно работать следующее:

var wordList = ["jQuery UI", "jQuery", "is"];
var regExp = new RegExp("\\b" + wordList.join("\\b|\\b") + "\\b", "g");
var $elem = $("#divWithText a");
$elem.html($elem.html().replace(regExp, "$&&trade;"));
0 голосов
/ 03 декабря 2009

как насчет добавления "jQuery</a>" и "jQuery UI</a>" в список поисковых терминов? (Вам потребуется экранировать специальные символы для правильной работы RegEx, но это может быть более простым (хотя и менее изящным) решением.)

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