这里有一点奇怪的故障。
当IF语句被注释掉时,childNode
的标记名称被正确记录,但是一旦取消注释IF语句,childNode
标记名称就会被记录为“{{1} }”。
#TEXT
http://jsfiddle.net/MythOfEchelon/VpNWA/3/
已完成,正在运行的代码:
<body>
<div id="page_Wrapper">
<h1>h1</h1>
<br />
<br />
<br />
<b>b</b>
<br />
<i>i</i>
<br />
<u>u</u>
<div>div</div>
<span>span</span>
</div>
<script>
window.onLoad = removeTags();
function removeTags(){
var allTags = document.getElementById("page_Wrapper").childNodes;
console.log("allTags length: " + allTags.length);
for (var i = 0; i < allTags.length; i++){
var tag = allTags[i].nodeName.toLowerCase();
console.log(tag);
/*
if (tag != "b" || tag != "br" || tag != "i"){
allTags[i].parentNode.removeChild(allTags[i]);
}
*/
}
}
</script>
</body>
答案 0 :(得分:1)
请参阅条件(tag != "b" || tag != "br" || tag != "i")
选择任何节点(它可能应该是(tag != "b" && tag != "br" && tag != "i") instead).
因此每次循环都会调用removeChild函数。
如果allTags[i].parentNode.removeChild(allTags[i]);
替换为
var x = allTags[i];
x.parentNode.removeChild(x);
答案 1 :(得分:0)
您可以添加此行以检查它是否为文本节点
for (...) {
if (allTags[i].nodeType == 3) continue; //nodeType = 3 means it is a text node
...
}