2013-09-16 7 views
2

Итак, давайте говорить, что мы имеем следующую структуру XML:Получает ли getElementsByTagName ВСЕ дочерние узлы?

<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") возвращения ALL property, label, value узлов или просто property узлов, не имеющие детей?

Почему я спрашиваю это, я хотел бы быть в состоянии сделать следующее:

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

Если функция не возвращает label или value узлов, что это лучший способ, чтобы получить, что сделанный?

+0

Возможно, вы хотите использовать 'xml.querySelectorAll (« метку свойства »)' для извлечения всех объектов метки внутри объекта свойства. – jfriend00

ответ

5

В getElementsByTagName метод «Возвращает NodeList всех потомокElements с заданным именем тега». Таким образом, getElementsByTagName("property") возвращает всех детей, детей детей и т. Д., Которые имеют имя тега property, независимо от содержимого такого узла. Разумеется, он не возвращает какой-либо узел с другим именем тега.

Так что да, код

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

делает то, что вы, кажется, хотят сделать: он присваивает labels а (живой) список label детей первого property элемента в документе, при условии, что есть по крайней мере один элемент property. (Для обеспечения надежности вы можете проверить, например, что props.length > 0, прежде чем переходить ко второму оператору.)

0

Попробуйте, это поможет вам

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 
    } 
} 
Смежные вопросы