2011-07-21 36 views
3
<script type="text/javascript"> 
    var haystackText = document.getElementById("navigation").innerHTML; 

    var matchText = '<a href="http://mydomain.co/?feed=rss">Subscribe to RSS</a>'; 

    var replacementText = '<ul><li>Some Other Thing Here</li></ul>'; 

    var replaced = haystackText.replace(matchText, replacementText); 

    document.getElementById("navigation").innerHTML = replaced; 
</script> 

我試圖嘗試將HTML代碼的字符串替換爲其他內容。我無法直接編輯代碼,所以我使用Javascript來更改代碼。getElementById替換HTML

如果我使用上面的方法匹配正則字符串上的文字,如只是'訂閱RSS',我可以代替它。但是,一旦我嘗試替換HTML字符串,代碼「失敗」。

另外,如果我希望替換的HTML包含換行符?我將如何搜索?

<ul><li>\n</li></ul> 

?? ??

我應該使用什麼或做什麼而不是這個?還是我錯過了一小步?我在這裏搜索,但也許我的搜索關鍵字不是最佳的,以找到適合我的情況的結果...

編輯:要提及,我正在寫我的頁腳,以及我希望替換的文本之後,所以這不是在我想要覆蓋顯示之前寫入腳本的問題。 :)

+0

你可以選擇使用jQuery嗎? –

+0

@Alex R.在這種情況下可以解決什麼問題?問題不在選擇器中。 –

回答

2

當前您使用的是String.replace(substring, replacement),它將搜索substring的完全匹配項,並將其替換爲replacement

"Hello world".replace("world", "Kojichan") => "Hello Kojichan" 

精確匹配的問題是,它不允許其他任何事情,但完全匹配。

要解決該問題,您必須開始使用正則表達式。當使用正則表達式,你必須要知道的

  • 特殊字符,如?/\需要逃脫\?\/\\
  • 多模式/正則表達式/平方米
  • 全局匹配,如果您希望替換表達式/ regexp/g的多個實例,併爲[1..n]空格字符允許多個白色空間實例\s+\s*爲[0..n]空白字符。

要使用正則表達式而不是子字符串匹配,只需要將String.replace("substring", "replacement")更改爲String.replace(/regexp/, "replacement") HTML(比純文本等)的散發出來的網頁

"Hello world".replace(/world/, "Kojichan") => "Hello Kojichan" 
+0

這是否意味着,我需要添加周圍的HTML代碼,我正在尋找? (並轉義所需字符)例如:string.replace(/ 代碼<\/html> /,替換); ? – Kojichan

+0

基本上是。 Lance Roberts也讀過答案,並記住空格字符。可能還有更多的彎路,但它將朝着正確的方向邁出一步。 –

+0

呵呵,就像你在打字時一樣解決它。 :) 謝謝你的幫助。 – Kojichan

0

正則表達式匹配是一個壞主意,很麻煩,使工作跨瀏覽器(尤其是IE)。從網頁出來的HTML並不總是看起來與放入的相同,因爲某些瀏覽器重構了HTML並且實際上並未存儲進入的內容。屬性可以改變順序,引號可以改變或消失,實體可以改變等...

如果你想修改整個標籤,那麼你應該直接訪問DOM並操作頁面上的實際對象。

1

MDN

Note: If a <div>, <span>, or <noembed> node has a child text node that 
includes the characters (&), (<), or (>), innerHTML returns these 
characters as &amp, &lt and &gt respectively. Use element.textContent 
to get a correct copy of these text nodes' contents. 

如此以來的textContent(或innerText屬性)將不會得到你的HTML,你必須適當地修改您的搜索字符串。

+1

請注意,在版本9之前的IE中,您應該使用'element.innerText'作爲'element.textContent'不支持 –

+0

@Aleksi,謝謝。 –

+1

同時'element.innerText'和'element.textContent'都忽略標籤:textContent of p:'

Bold

'returns' Bold'。如果Kojichan想要替換'innerHTML'中的HTML標籤,這些方法也無濟於事。 –