用childNOdes选择一个父节点的子节点时,非IE浏览器如FF,chrome把换行符也当做一个元素了。
如
<div id="test">
<div></div>
<div></div>
<div></div>
</div>
var a =document.getElementById("test").childNodes;
a在IE中是3,但在chrome中是7,是因为chrome把换行也当做一个元素了。
可以用下面的方法去除换行符子节点
function clearSpace(elem) { var elemchild = elem.childNodes; for (var i = 0; i < elemchild.length; i++) { var s = elemchild[i].nodeName; var r = elemchild[i].nodeValue; if (s == "#text" && /s/.test(r)) { contentdiv.removeChild(elemchild[i]); } } }
上述函数遍历子元素,当元素里面有节点类型是文本并且文本类型节点的节点值是空的。就把他删除。
nodeName可以得到一个节点的节点名字,在JS里的正则表达式s是表示包括空格、制表符、换页符等空白字符的其中任意一个。
test() 方法用于检测一个字符串是否匹配某个模式.语法是: RegExpObject.test(string)
如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false。
其实还有另一种方法得到父节点的子节点数组,如
var divarray = document.getElementById("test").getElementsByTagName("div");
但是这里有一个问题:如果test的后代节点也有div,那么用getElementsByTagName("div")得到的数组长度要远大于3.所以还是清除换行符的方法比较可靠