Javascript 更改正文文本(快速方式)

Javascript 更改正文文本(快速方式),javascript,Javascript,我需要更改正文内容中的指定文本 我目前是这样做的: findAndReplace: function(str, value) { document.body.innerHTML = document.body.innerHTML.replace('%'+str+'%', value); } 有没有更有效的方法?在大页面上,它会变得非常慢。你要求浏览器做的是旋转所有DOM元素,为它们创建HTML,将HTML交给JavaScript层,从JavaScript层接受新HTML,销毁所有旧元素

我需要更改正文内容中的指定文本

我目前是这样做的:

findAndReplace: function(str, value) {
    document.body.innerHTML = document.body.innerHTML.replace('%'+str+'%', value);
}

有没有更有效的方法?在大页面上,它会变得非常慢。

你要求浏览器做的是旋转所有DOM元素,为它们创建HTML,将HTML交给JavaScript层,从JavaScript层接受新HTML,销毁所有旧元素,并从新字符串完全重建页面

如果要替换的文本仅作为元素中的文本出现,而没有内部标记,例如,但此处为“是”,则您可能会更幸运地执行递归DOM漫游:

walk(document.body, new RegExp('%' + str + '%', "g"), "the replacement");
function walk(node, target, replacement) {
  var child, text, newText;

  switch (node.nodeType) {
    case 1: // Element
      for (child = node.firstChild;
           child;
           child = child.nextSibling) {
        walk(child, target, replacement);
      }
      break;

    case 3: // Text node
      text = node.nodeValue;
      newText = text.replace(target, replacement);
      if (text != newText) {                // Profile to see if this test matters
          node.nodeValue = text;
      }   
      break;
  }
}
注意,我在这里使用了一个正则表达式,因为除此之外,只替换第一次出现的表达式。请注意,如果str包含任何在正则表达式中特殊的字符,如^、、*,等等,则需要对其进行转义。搜索javascript regexp escape以找到各种实现,这些实现将为您处理这一问题

这可能更快的两个原因:

您没有要求引擎为页面上的每个元素生成HTML,销毁元素并重新创建它们

您并不是不必要地更新文本节点的内容,而是再次分析测试是否真的值得


它还可以防止脚本出现问题,例如,如果您连接了事件处理程序,然后bludgeon document.body.innerHTML,那么您的处理程序就不存在了。有了以上内容,它们就不会被触动。

HTML是什么样子的?你想替换什么?你的页面有多大?有没有更好的方法可以针对替换项?没有,我不能给它们一个id或其他任何东西。更有效的方法是针对一个特定的元素,并且只使用document.getElementById而不是document.body来更改它。你为什么不能给他们一个身份证?@Felix:不用担心,很高兴能帮上忙。