元素,指的是html的标签。
节点,根据DOM,HTML文档中每个成分都是一个节点,节点的类型有三种,元素节点,文本节点和属性节点。
节点.nodeType:查看及该节点的类型:
如果 nodeType== 1:指的是元素节点;
==2:指的是属性节点;
== 3:指的是文本节点
节点.nodeName: 查看该节点的名字:
标签节点---大写的标签名字,属性节点---小写的属性名字,文本节点----#text
节点.nodeValue:该节点的值
标签节点---null,属性节点---属性值,文本节点---文本内容
举个例子
<body>
<div>
<p>
</body>
在body标签中,它的子元素个数有两个,即div元素和p元素,而它的子节点则有5个,即文本节点,div节点,文本节点,p节点,文本节点。
获取相关节点和元素的方法,一共有12种
- 获取父亲节点:对象.parentNode
- 获取父亲元素:对象.parentElement
- 获取子节点:对象.childNodes (返回伪数组)
- 获取子元素:对象.children (返回伪数组)
- 获取第一个节点:对象.firstChild
- 获取第一个子元素:对象.firstElementChild
- 获取最后一个子节点:.lastChild
- 获取最后一个子元素:对象.lastElementChild
- 获取前一个兄弟节点:对象.previousSibling
- 获取前一个兄弟元素:对象.previousElementSibling
- 获取后一个兄弟节点:对象.nextSibling
- 获取后一个兄弟元素:对象.nextElementSibling
总结:在谷歌和火狐浏览器中,1~12种方法都支持,获取节点的方法获取到的是节点,获取元素的方法获取到的是元素;
在IE8浏览器中,从5开始,获取节点的方法获取到的是元素,获取元素的方法获取到的是undefind,不支持获取元素的方法
因此,在获取元素时则要考虑到浏览器的兼容性。样例:获取任意一个父元素的第一个子元素
//因为firstChild毕竟是获取节点的方法,所以加上循环确保此节点是元素节点,严谨
function getFirstChildElement(fElement){
if(fElement.firstElementChild){
return fElement.firstElementChild;
}else{
var node = fElement.firstChild;
while(node && node.nodeType != 1){
node = node.nextSibling;
}
return node;
}
}