Javascript ';文本内容';是否为null或不是对象

Javascript ';文本内容';是否为null或不是对象,javascript,ie-developer-tools,Javascript,Ie Developer Tools,我对这个代码有问题 这段代码在所有浏览器上都运行得很好,除了IE,我的IE是8.0 有解决办法吗? 我不会使用jquery 真诚地 注意:我将Node.TEXT\u Node更改为3,但出现了其他错误:“textContent”为null或不是对象 <!DOCTYPE html> <html> <head> <script> function replaceText(oldText, newText, node){ node =

我对这个代码有问题 这段代码在所有浏览器上都运行得很好,除了IE,我的IE是8.0 有解决办法吗? 我不会使用jquery 真诚地 注意:我将Node.TEXT\u Node更改为3,但出现了其他错误:“textContent”为null或不是对象

 <!DOCTYPE html>
 <html>
 <head>
 <script>

 function replaceText(oldText, newText, node){ 
   node = node || document.body; 

   var childs = node.childNodes, i = 0;

   while(node = childs[i]){ 
     if (node.nodeType == Node.TEXT_NODE){ 
  node.textContent = node.textContent.replace(oldText, newText); 
} else { 
  replaceText(oldText, newText, node); 
} 
     i++; 
   } 
 }

 </script>
 </head>
 <body>
 old
 <h1 id="myHeader" onclick="replaceText('old','new')">old Click me! whatever</h1>

 </body>
 </html>

函数replaceText(旧文本、新文本、节点){
node=node | | document.body;
var childs=node.childNodes,i=0;
而(node=childs[i]){
如果(node.nodeType==node.TEXT\u node){
node.textContent=node.textContent.replace(旧文本,新文本);
}否则{
替换文本(旧文本、新文本、节点);
} 
i++;
} 
}
古老的
老点击我!无论什么
我找到了

   while(i < childs.length){
   if (rgx.test(document.body.innerHTML)){
   childs[i][textPropName] =childs[i][textPropName].replace(rgx,'new');
   }
   else
   {
   replaceText(oldText, newText,document.body.childNodes[i])
   }
        i++; 
      } 
    }  
while(i
节点。文本节点
文本内容
在IE8中不可用


使用
3
而不是
Node.TEXT\u Node
,如果
textContent
不可用,则使用
innerText

var textPropName = node.textContent === undefined ? 'innerText' : 'textContent';

if (node.nodeType == 3) {
    node[textPropName] = node[textPropName].replace(oldText, newText); 
} else { 
    replaceText(oldText, newText, node); 
}

您可能应该将
textPropName
缓存在函数外部,这样您就不会每次调用函数时都重新检查它(使用
document.body
进行测试)。

节点。TEXT\u节点
textContent
在IE8中不可用


使用
3
而不是
Node.TEXT\u Node
,如果
textContent
不可用,则使用
innerText

var textPropName = node.textContent === undefined ? 'innerText' : 'textContent';

if (node.nodeType == 3) {
    node[textPropName] = node[textPropName].replace(oldText, newText); 
} else { 
    replaceText(oldText, newText, node); 
}

您可能应该将
textPropName
缓存在函数外部,这样您就不会在每次调用函数时都重新检查它(使用
document.body
进行测试)。

使用nodeValue代替textContent

node.nodeValue = node.nodeValue.replace(oldText, newText); 

使用nodeValue代替textContent

node.nodeValue = node.nodeValue.replace(oldText, newText); 

@HovercraftFullOfEels-我已经纠正了这个问题。我很抱歉,我使用了java脚本的空间,但之后忘记了纠正它edit@HovercraftFullOfEels-我已经更正了。我很抱歉我使用了java脚本的空间,然后忘记在编辑后更正它。谢谢Joseph,但我在3之前将其更改为3,但再次给我此错误“textContent”为null或不是object@MD66 - 我忘了提到IE8不支持
textContent
;它使用
innerText
。我更新了我的答案。@Silber谢谢,但在这一行中给出未定义的错误节点[textPropName]=node[textPropName]。替换(oldText,newText);谢谢Joseph,但我在3之前将其更改为3,但请再次告诉我此错误“textContent”为null或不是object@MD66-我忘了提到IE8不支持
textContent
;它使用
innerText
。我更新了我的答案。@Silber谢谢,但在这一行中给出未定义的错误节点[textPropName]=node[textPropName]。替换(oldText,newText);