2014-02-14 3 views
0

Как я могу получить элемент с помощью TagName, если он попадает под определенный класс?GetElementByTagName в определенном классе?

Пример, если бы я хотел выбрать каждое значение <li> TagName, которое находится в пределах test_class.

<ul class="test_class"> 
    <li> 
     1 
    </li> 
    <li> 
     2 
    </li> 
    <li> 
     3 
    </li> 
    <li> 
     4 
    </li> 
</ul> 
+0

'document.querySelectorAll ('test_class Ли')' :-D –

ответ

2

Вы можете:

  • Получить ссылку на элемент, который членом этого класса, а затем вызвать getElementsByTagName на этом DOM элемент или
  • Использование document.querySelectorAll(".test_class li"), который принимает CSS Selector

Используйте первый подход, если вам нужно поддерживать старый IE.

4

Вы можете использовать querySelectorAll

var listItems = document.querySelectorAll(".test_class li"); 
//=> [li, li, li, li] 

Поддерживается

Browser Version 
Chrome  1 
Firefox 3.5 
IE   8 (CSS2 selectors only) 
IE   9 
Opera  10 
Safari  3.2 

Если вам необходимо поддерживать старые браузеры, вы не можете зависеть от .querySelectorAll

// find all UL.test_class 
var lists = document.getElementsByClassName("test_class"), 
    listItems = []; 

// loop through all lists and concat all children LI elements to single result 
for (var i=0, len=lists.length; i<len; i++) { 
    listItems.concat(lists[i].getElementsByTagName("li")); 
} 

console.log(listItems); 
//=> [li, li, li, li] 

Производительность

Чтобы не удивительно, то .querySelectorAll лишь немного медленнее, но ничего себе уверен лаконичен. Я бы не стал преждевременно оптимизировать в этом случае, если вы действительно не требуется для поддержки старых браузеров (IE < = 7)

http://jsperf.com/qsa-vs-getelementbytagname

1

Вы можете связать запрос DOM.

var items = document 
       .getElementsByClassName('test_class')[0] 
       .getElementsByTagName('li'); 
+1

Как ни странно, что это не имеет смысла идти с 'getElementsByClassName (IE9 +)' + 'getElementsByTagName', если вы можете использовать' querySelectorAll (IE8 +) ', так как позже будет иметь лучшую поддержку IE. Но ради полноты его также следует поддерживать. – dfsq

+0

Ты совершенно прав - мой плохой. – marionebl

+0

В любом случае, хорошо указать все возможности. – dfsq

Смежные вопросы