我做了兩次不同的嘗試,在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