2012-10-23 29 views
1

我想要做一個綠色文字 Firefox的插件使用Greasemonkey,但沒有jQuery。使用JavaScript替換「>」文本

這裏就是我所做的:

<head> 
<script type="text/javascript"> 
    function highlight() { 
     var elm = document.getElementsByClassName("mainWrapper"); 

     for(i = 0; i < elm.length; i++) 
     { 
      elm[i].innerHTML.replace(">","pony"); 
     } 
    } 

    alert("PONY"); 
</script> 
</head> 

<body onload="highlight()"> 
<div class="mainWrapper"><span class="noob"> > N00b </span> 
</div> 
</body> 

這是一個測試版的功能,我這樣做是因爲我覺得現在的問題是Greasemonkey的,但它並沒有正常工作。

你能幫我嗎?我不擅長編程,也不知道如何在JS上編寫腳本。

+2

更換所有'>'S,即使是那些這應該是關閉標籤,這是一個壞主意。您甚至可能不會替換您想要替換的那些,因爲它們會被瀏覽器轉義。 –

回答

2

這樣的事情,你需要工作只在頁面的文本部分 - 以便HTML(和任何附加的JS)不會被破壞。 (1)不使用innerHTML,(2)代碼最好使用名爲recursion的技術來有效地解析節點。

還要注意的是>可以編碼爲>&gt;(和可能的一些罕見的方法太)。

這裏是一個完整的Greasemonkey腳本,做這種搜索和替換:

// ==UserScript== 
// @name  _Replace HTML-sensitive text 
// @include  http://YOUR_SERVER.COM/YOUR_PATH/* 
// @include  http://fiddle.jshell.net/DJLEq/* 
// @grant  none 
// ==/UserScript== 

var targElements = document.querySelectorAll ("div.mainWrapper"); 

for (var J = targElements.length - 1; J >= 0; --J) { 
    repGreaterWithPonies (targElements[J]); 
} 

function repGreaterWithPonies (node) { 
    if (node.nodeType === Node.TEXT_NODE) { 
     // YOUR CUSTOM REPLACE GOES HERE. 
     node.nodeValue = node.nodeValue.replace (/>|&gt;/ig, "pony"); 
    } 
    else if (node.nodeType === Node.ELEMENT_NODE) { 
     for (var K = 0, numNodes = node.childNodes.length; K < numNodes; ++K) { 
      repGreaterWithPonies (node.childNodes[K]); 
     } 
    } 
} 


安裝了該腳本you can see it work on this page: fiddle.jshell.net/DJLEq/...

+0

對不起,但它仍然無法正常工作。 Facebook不接受文本空間中的HTML代碼,這就是爲什麼我需要使用innerHTML。我必須與頁面的HTML緩存進行交互。 – user1769358

+0

這可能是事實,但這不是問題所述或暗示的問題。這個問題,**實際上被問**已經被**回答。**如果這不是你的意思,那麼就開始一個新的問題,並且不要忽略關鍵細節,比如Facebook將如何使用它。 –

+0

好的,對不起! – user1769358

0

不上的問題十分清楚,但看着你的代碼看起來你想這樣做:

<head> 
    <script type="text/javascript"> 
    function highlight() { 
    var elm = document.getElementsByClassName("mainWrapper"); 
    for(i = 0; i < elm.length; i++)    
    {       
     elm[i].innerText = elm[i].innerText.replace(">","pony");   
    }  
    } 
</script> 
</head> 
<body onload="highlight()"> 
<div class="mainWrapper">><span class="noob"> N00b </span> 
</div> 
</body>​ 

EXAMPLE