我做了两次不同的尝试,在Chrome扩展中使用JQuery替换网页中所有单词的出现。两种尝试种类的都起作用,但都不能用作通用方法,以便从网页中替换所有出现的单词。如何使用JQuery替换网页中某个单词的所有发生?
如何编写一个脚本来替换网页中某个词的所有出现?
请参阅类的两种不同尝试的详细信息,但由于不同的原因而失败。
尝试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)试图通过替代DOM树上的body
或div
的HTML来处理站点功能受损的每一种边缘情况将是一场噩梦。
我用于第二次尝试代码:
$("*").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()));
}
}
我怎么可以编写脚本,用于替换某个单词出现的所有网页?
谢谢!
顺便说一句,你的第二次尝试的选择很容易被写作'$( '字型,跨度,P')'否定需要检查'nodeName'。 – roryf 2011-03-01 11:35:20