Peaceful mind Where there is a will, there is a way!

26May/090

childNodes与children的区别

我们知道,一个文档由元素节点,文本节点和属性节点构成。

children只对dhtml object进行检索childNodes对dhtml object 和text node节点进行检索,也就是说用children和childNodes检索的对象只能是元素节点和文本节点,属性节点肯定不在检索之列。但如果标签并不是标准的,如下例子children与childNodes的调用其子节点的区别。由于childNodes的检索中包含了文本节点,而文本节点的tagName是undefined(但nodeName是#text),所以检索时不存在children.item(id/name)进行调用子节点的方法,childNodes.item(id/name)(k)将直接返回(对<a>来说,就是href的值),另外,如果有多个name相同的元素时,用item检索出来的对象的length才有意义。


  • List Item 1
  • List Item 2
  • List Item 3
aTextNode

其中的<mytab></mytab>是我随便定义的标签,用children和childNodes进行检索时都分别统计2次。此外,如果对于<form>,<table>,<script> 等标签(目前只验证了这几个),如果忘记关闭标签,则统计时会把form标签后面出现标签全部忽略,只统计一次,但对<a>等需要关闭的标签没有影响。无论其关闭不关闭Children
如果有多个,则descentobj.item("id")[k].tagName
补充:
<a>和<input>标签使用getElementById或者getElementsByTagName的不同
对于<a>,getElementById 直接返回href的值,对于<input>,getElementById返回是object对象,
此外,还有个可疑的地方,在统计body的子节点时,无论childNodes还是children,;后的标签

Tagged as: No Comments