2011-06-27 54 views
1

這是我的jQuery腳本替換字符串新的字符串:Jquery的字符串替換無法添加HTML元素的前後

$("*").contents().each(function() { 
if(this.nodeType == 3) 
    this.nodeValue = this.nodeValue.replace("1.(800).123.1234", "new"); 
}); 

工作示例:http://jsfiddle.net/webdesignerart/eKRGT/

,但我想之前和之後添加字符串HTML元素一樣

當我這樣做:

this.nodeValue = this.nodeValue.replace("1.(800).123.1234", "<b>new</b>"); 

結果來了:

<b>new</b> 

我想這個輸出:

我想更換過程中允許HTML標籤。

是jquery .append與此工作。

回答

0

您正在替換TextNode元素的內容,該元素始終只是文本。要使文字變爲粗體,您需要創建另一個元素b,其中包含TextNode。一種方法是使用wrap()從jQuery的:

$("*").contents().each(function() { 
    var me = this; 
    if(this.nodeType == 3) 
     this.nodeValue = this.nodeValue.replace("1.(800).123.1234", function(a){ 
      $(me).wrap('<b />'); 
      return "new";    
     }); 
}); 

例如:http://jsfiddle.net/niklasvh/eLkZp/

+0

這將使整個節點大膽,不只是新的.. http://jsfiddle.net/eLkZp/18/ –

+0

你的腳本工作的朋友喜歡魅力:) –

0

這應該工作:

$("*").contents().each(function() { 
    var me = this; 
    if(this.nodeType == 3 
     && this.nodeValue.indexOf("1.(800).123.1234")>-1){ 

     $(this).replaceWith(this.nodeValue.replace("1.(800).123.1234", "<b>new</b>")); 
    }   
}); 

http://jsfiddle.net/eLkZp/20/

基本上替換文本節點,而不僅僅是文字在它之內。

你應該真的考慮是否有某種方法來縮小原始過濾器的範圍。解析你的整個頁面通常是一個壞主意。