getElementsByTagName是否返回所有子节点?

geo*_*off 2 html javascript 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 -->
Run Code Online (Sandbox Code Playgroud)

只要我们正确地加载XML文档转换为可变var xml,并xml.getElementsByTagName("property")返回所有property,label,value节点或只是property没有孩子的节点?

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

var props = xml.getElementsByTagName("property");
var labels = props[0].getElementsByTagName("label");
Run Code Online (Sandbox Code Playgroud)

如果该函数不会返回任何节点labelvalue节点,那么完成这项操作的最佳方法是什么?

Juk*_*ela 5

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

是的,代码

var props = xml.getElementsByTagName("property");
var labels = props[0].getElementsByTagName("label");
Run Code Online (Sandbox Code Playgroud)

做你似乎想要做的事情:它分配给文档中第一个元素labels的(实时)子列表,前提是至少有一个元素.(因此,为了稳健性,您可能希望在继续执行第二个语句之前检查它.)labelpropertypropertyprops.length > 0