开发者

Jquery String Replace Can't add html element before and after

This is m开发者_Go百科y jquery script that replace string to new string:

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

working example : http://jsfiddle.net/webdesignerart/eKRGT/

but i want to add before and after to string html element like new

when i do this :

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

The Result comes:

<b>new</b>

I want output this: new

i want to allow html tags during replacement.

is jquery .append work with this.


You are replacing the contents of a TextNode element which is always just text. To make the text bold, you will need to create another element, b which wraps around the TextNode. One approach is to use the wrap() from 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";            
        });
});

example: http://jsfiddle.net/niklasvh/eLkZp/


This should work:

$("*").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/

Basically replace the text node rather than just the text within it.

You should really consider if there's some way to narrow down that original filter though. Parsing your entire page is generally a bad idea.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜