2010-07-29 40 views
3

我想用jQuery找到一些特定的文本替換它,並用更新的版本包括一些HTML取代它。查找文本(A)和文本(B)+ HTML

我已經試過this,這是工作的時候我只用文字:

<script type="text/javascript" > 
    jQuery(document).ready(function(){ 

    jQuery("*").contents().each(function() { 
    if(this.nodeType == 3) 
    this.nodeValue = this.nodeValue.replace("hello mum", "bye bye mum"); 
    }); 

    }) 
</script> 

不過,如果我添加一些文本+ HTML更換有針對性的表達,它被「格式化」,讀爲純文本...

你知道你們一些解決這個問題? 我可以添加HTML的更換體現在哪裏?

謝謝。

回答

4

jQuery是一個小問題,當涉及到文本節點。另外,由於您直接操作文本節點的內容,因此所有HTML都將被視爲文本。

我能想到的最簡單的辦法是有點哈克,但偉大工程:)

與虛擬HTML元素替換文本節點。然後用替換的HTML替換該虛擬HTML元素。

var isTextNode = this.nodeType == 3; 
var matchesText = this.nodeValue.indexOf('hello mum') > -1; 

if(isTextNode && matchesText) { 
    // replace text node with dummy element 
    // so jQuery can be used 
    var dummy = $('<b>'); 
    this.parentNode.replaceChild(dummy[0], this); 

    dummy.replaceWith('my <b>awesome</b> html now <i>works</i>'); 
} 
+0

讀取不要忘記你'> -1'的'。 indexOf()'在文本位於索引「0」的情況下。 :O)編輯:另外'this.nodeType = 3'應該是'this.nodeType == 3' – user113716 2010-07-29 18:40:35

+0

@patrick - 謝謝:)固定這些問題。 – Anurag 2010-07-29 19:00:27

0

this.nodeValue = this.nodeValue.replace( 「你好媽媽」, 「再見媽媽」);

改爲

this.nodeValue = this.nodeValue.replaceWith( 「你好媽媽」, 「

一些HTML東西

」);

+0

這是我嘗試過,但第二部分是字面上的輸出,即使是一些HTML標籤,他們將訪問者 – Peanuts 2010-07-29 18:06:44