jQuery: replace() in html()

前端 未结 3 824
臣服心动
臣服心动 2021-01-05 13:23

How can I replace html parts with replace()?




        
相关标签:
3条回答
  • 2021-01-05 13:25

    Make your pattern global by using the g switch:

    var e = $("div"),
    fix = e.html().replace(/google.com/g, "duckduckgo.com");
    e.html(fix);
    

    jsFiddle example

    This way it replaces the link and the text.

    0 讨论(0)
  • 2021-01-05 13:36

    The problem is that .replace only replaces first occurence. If you want to replace all occurences, you must use a regular expression with a g (global) flag:

    var e = $("div"),
        fix = e.html().replace(/google\.com/g, "duckduckgo.com");
    e.html(fix);
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div>
        <a href="http://www.google.com">google.com</a>
    </div>

    Demo

    Remember you must escape special characters such as ., though. If you prefer, you can use

    String.prototype.replaceAll = function(s1, s2) {
        return this.replace(
            new RegExp(  s1.replace(/[.^$*+?()[{\|]/g, '\\$&'),  'g'  ),
            s2
        );
    };
    
    var e = $("div"),
        fix = e.html().replaceAll('google.com', "duckduckgo.com");
    e.html(fix);
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
    <div>
        <a href="http://www.google.com">google.com</a>
    </div>

    Demo

    0 讨论(0)
  • 2021-01-05 13:52
    $("div a").attr("href", function (i, o) {
        return (/google/.test(o) ? "http://duckduckgo.com" : o)
    }).html($("a", this).attr("href").substr(7))
    

    jsfiddle http://jsfiddle.net/guest271314/6rrKs/

    0 讨论(0)
提交回复
热议问题