代码改变世界

tagName和nodeName的区别

2013-09-04 07:59  杨泽川  阅读(962)  评论(0编辑  收藏  举报

首先介绍DOM里常见的三种节点类型(总共有12种,如docment):元素节点,属性节点以及文本节点,例如<h2 class="title">head</h2>,其中h2是元素节点,class是属性节点,head是文本节点,在这里你可以说h2这个元素节点包含一个属性节点和一个文本节点。其实几乎所有HTML的标签都是元素节点,而id, title, class等则是属性节点,而元素所包含的文本内容则是文本节点。

tagNamenodeName的语义是一样的,都是返回所包含标签的名称,例如上面的h2标签,都是返回h2,但是tagName只能在元素标签上使用,而nodeName则可以在所有的节点上使用。下面是nodeName在不同节点上的值:

 

Interface

nodeName

nodeValue

attributes

Attr

name of attribute

value of attribute

null

CDATASection

#cdata-section

content of the CDATA Section

null

Comment

#comment

content of the comment

null

Document

#document

null

null

DocumentFragment

#document-fragment

null

null

DocumentType

document type name

null

null

Element

tag name

null

NamedNodeMap

Entity

entity name

null

null

EntityReference

name of entity referenced

null

null

Notation

notation name

null

null

ProcessingInstruction

target

entire content excluding the target

null

Text

#text

content of the text node

null

tagName只有在元素节点上才会有值。

DOM层次来看,nodeName

node 接口上的property,而tagNameelement 接口上的property,所有的节点(元素节点,属性节点,文本节点等12种)都继承了node接口,而只有元素节点才继承了element节点,因此nodeNametagName具有更大的使用范围。

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