tagName与nodeName 有什么区别

来源:互联网 发布:消防楼梯送风编程 编辑:程序博客网 时间:2024/06/08 07:05

转自:http://bbs.csdn.net/topics/310093611


例如

<标签名 属性="属性值">文本节点(包括回车换行等空字符)</标签名>
<xxx></xxx>或<xxx/>这种类型的称为元素
元素包含属性节点(就是上面的属性),也可包含其他节点,比如文本节点等
由于回车换行等空字符等空字符也是节点,所以
<xx>xx<xx>和
<xx>
xx
<xx>

从文档树上看是不一样的。(对于html显示可能是一样的)

还是举例说明吧:

html里
<div, <span等是HTML元素, 有tagName属性
文本则没有tagName属性但有nodeName属性


XML/HTML code
?
1
2
3
4
5
6
7
8
9
<div id="d">asdasd</div>
<script>
    var d = document.getElementById('d');
    alert(d.tagName); // div
    alert(d.nodeName); // div  d的tagName和nodeType相同
 
    alert(d.firstChild.tagName); // undefined
    alert(d.firstChild.nodeName); // #text 这里指的是文本节点或回车换行等的节点, 他们没有tagName只有nodeName
</script>



根据 DOM,HTML 文档中的每个成分都是一个节点。

DOM 是这样规定的:

  ●整个文档是一个文档节点
  ●每个 HTML 标签是一个元素节点
  ●包含在 HTML 元素中的文本是文本节点
  ●每一个 HTML 属性是一个属性节点
  ●注释属于注释节点



  HTML DOM 重量元素的节点信息 

      元素类型 节点信息 
     nodeName   nodeValue nodeType 
元素 标签名称     不可用        1 
属性 属性名称     属性值        2 
文本 #text       文本          3 
注释                            8 
文档 #document    不可用      9 


从DOM层次来看,nodeName是node 接口上的property,而tagName是element 接口上的property,所有的节点(元素节点,属性节点,文本节点等12种)都继承了node接口,而只有元素节点才继承了element节点,因此nodeName比tagName具有更大的使用范围。

总结:tagName只能用在元素节点上,而nodeName可以用在任何节点上,可以说nodeName涵盖了tagName,并且具有更多的功能,因此建议总是使用nodeName。