getElementsByTagName是否返回所有子节点?

时间:2013-09-16 05:11:16

标签: javascript html xml dom

所以我们假设我们有以下XML结构:

<property>
    <label>Label 1</label>
    <value>value 1</label>
</property>
<property>
    <label>Label 2</label>
    <value>value 2</label>
</property>
<!-- more of these -->

如果我们已将XML文档正确加载到变量var xml中,xml.getElementsByTagName("property")是否会返回所有propertylabelvalue个节点或仅property 1}}没有孩子的节点?

为什么我要问这个问题,我希望能够做到以下几点:

var props = xml.getElementsByTagName("property");
var labels = props[0].getElementsByTagName("label");

如果该函数不会返回任何labelvalue个节点,那么最好的方法是什么?

2 个答案:

答案 0 :(得分:5)

getElementsByTagName方法“返回具有给定标记名称的所有后代 NodeList的{​​{1}}”。因此,无论此类节点的内容是什么,Elements都会返回标记名为getElementsByTagName("property")的所有孩子,孩子的孩子等。它当然不会返回任何具有不同标记名称的节点。

是的,代码

property

执行您似乎想要执行的操作:它将var props = xml.getElementsByTagName("property"); var labels = props[0].getElementsByTagName("label"); 分配给文档中第一个labels元素的label子项的(实时)列表,前提是其中至少一个property元素。 (因此,为了获得稳健性,您可能希望在继续执行第二个语句之前检查例如property。)

答案 1 :(得分:1)

试试这个,这有助于你

var props = xml.getElementsByTagName("property");
var eleChild = props .childNodes;
for( i = 0 , j = eleChild.length; i < j ; i++ ){
    if( eleChild[ i ].className == "autodropdown" ){
        YOUr_SCRIPT
    }
}