js 选取子节点时去除非IE浏览器的换行符

用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.所以还是清除换行符的方法比较可靠

 
 
原文地址:https://www.cnblogs.com/xiang1336/p/3484823.html