node.parentNode.removeChild(node)删除当前节点,DOM树会发生实时的变化,会影响后续节点的遍历。所以,若要删除某些特定的节点,可以先进行递归遍历,将这些节点存放到某一数组中,然后,再遍历去删除
1、遍历出所有的空白node存放于数组中
function lookforSpaceTextNode(node,spaceNodes) {
var nodeList = node.childNodes;
for(var i=0; i<nodeList.length; i++) {
var n = nodeList[i];
if(n.nodeType == document.ELEMENT_NODE) {
lookforSpaceTextNode(n,spaceNodes);
}else if(n.nodeType == document.TEXT_NODE) {
if(trim(n.nodeValue) == "") {
spaceNodes[spaceNodes.length] = n;
}
}
}
}
2、删除
//需要页面加载完所有标签后
window.onload = function() {
var root=document.documentElement;
var spaceNodes = [];
lookforSpaceTextNode(root,spaceNodes);
for(var i=0; i<spaceNodes.length; i++) {
spaceNodes[i].parentNode.removeChild(spaceNodes[i]);
}
iterateElement(root,"");
}