Javascript ';文本内容';是否为null或不是对象
我对这个代码有问题 这段代码在所有浏览器上都运行得很好,除了IE,我的IE是8.0 有解决办法吗? 我不会使用jquery 真诚地 注意:我将Node.TEXT\u Node更改为3,但出现了其他错误:“textContent”为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 =
<!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);