Я сделал две разные попытки заменить все вхождения одного слова на веб-странице с помощью JQuery в расширении Chrome.Обе попытки вида работали, но ни одна из них не работала как универсальный метод для замены всех вхождений слова на веб-странице.
Как мне написать скрипт, который заменяетвсе вхождения определенного слова на веб-странице?
Подробнее о 2 разных попытках, которые оба вида сработали, но по разным причинам не удалось.
Попытка 1: Заменить текст узлов, которые не имеют дочерних элементов.Это терпит неудачу в случаях, когда дочерние узлы используются для форматирования.Например, происходит сбой при разборе следующего:
<p>StringToReplace <strong>doesn't</strong> get replaced!</p>
Точный код, который я использовал для этой попытки:
$("*").each(function () {
if ($(this).children().length == 0) {
$(this).text(replaceStrings($(this).text()));
}
}
(replaceStrings - это отдельная функция с кучей произвольных вызововзаменить)
Попытка 2: заменить HTML узлов, которые, вероятно, содержат только текст (например, p
).Это не удается, потому что на некоторых веб-страницах, над которыми должен работать мой сценарий, текст должен отображаться прямо внутри тегов, например body.Если я попытаюсь заменить текст HTML тела, это приведет к нежелательному побочному эффекту нарушения функциональности на некоторых страницах.IMO, это было бы кошмаром, чтобы попытаться обработать каждый крайний случай, когда функциональность сайта нарушена, заменив HTML на body
или div
s вверх по дереву DOM.
Код, который я использовал для этой второй попытки:
$("*").each(function () {
if (
$(this)[0].nodeName.toLowerCase() == "font"
|| $(this)[0].nodeName.toLowerCase() == "span"
|| $(this)[0].nodeName.toLowerCase() == "p"
//|| $(this)[0].nodeName.toLowerCase() == "body"
// || $(this)[0].nodeName.toLowerCase() == "div"
){
$(this).html(replaceStrings($(this).html()));
}
}
Как мне написать скрипт, который заменяет все вхождения определенного слова на веб-странице?
Спасибо!