代码之家  ›  专栏  ›  技术社区  ›  different

如何用Javascript实现客户端替换?

  •  0
  • different  · 技术社区  · 17 年前

    var searchFor = new Object();
    var replaceWith = new Object();
    searchFor =
    [
        "quick",
        "brown",
        "fox",
    ];
    
    replaceWith =
    [
        "nimble",
        "black",
        "cat",
    ];
    

    因此,“brown”的每一个实例都应该被“black”替换。最简单的跨浏览器方式是什么?

    1 回复  |  直到 5 年前
        1
  •  2
  •   Tomalak    17 年前

    // replacer object, containing strings and their replacements
    var replacer = {
      "quick": "nimble",
      "brown": "black",
      "fox": "cat"
    };
    
    // prepare regex cache
    var replacer_re = (function ()
      {
        var replacer_re = {};
        // certain characters are special to regex, they must be escaped
        var re_specials = /[][/.*+?|(){}\\\\]/g; 
        var word;
        for (word in replacer)
        {
          var escaped_word = word.replace(re_specials, "\\\1");
          // add \b word boundary anchors to do whole-word replacing only
          replacer_re[word] = new RegExp("\\b" + escaped_word + "\\b", "g");
        }
        return replacer_re;
      }
    )();
    
    // replace function
    function ReplaceText(text)
    {
      var word;
      for (word in replacer)
        text = text.replace(replacer_re[word], replacer[word]);
      return text;
    }
    
    // DOM recursing function
    function ReplaceTextRecursive(element)
    {
      if (element.childNodes)
      {
        var children = element.childNodes;
        for (var i = children.length - 1; i >= 0; i--)
          ReplaceTextRecursive(children[i]);
      }    
    
      if (element.nodeType == 3) // 3 == TEXT_NODE
        element.nodeValue = ReplaceText(element.nodeValue);
    }
    
    // test it
    function test()
    {
      ReplaceTextRecursive(document)
    }