2010-10-26 3 views
10

Как я могу заставить JS выбрать каждый элемент LI внутри тега UL и поместить его в массив?Получить все элементы LI в массиве

<div id="navbar"> 
     <ul> 
      <li id="navbar-One">One</li 
      ><li id="navbar-Two">Two</li 
      ><li id="navbar-Three">Three</li 
      ><li id="navbar-Four">Four</li 
      ><li id="navbar-Five">Five</li> 
     </ul> 
    </div> 

Могу ли я сделать так, JS получает каждый из них в массив, например навигационной панели [ '0'] вернет document.getElementById ("NavBar-One")?

ответ

34

Вы можете получить NodeList перебирать с помощью getElementsByTagName(), как это:

var lis = document.getElementById("navbar").getElementsByTagName("li"); 

You can test it out here. Это NodeList не массив, но он имеет .length, и вы можете перебирать его как массив.

+0

Thats это! Благодаря! – Diesal11

+0

первая ссылка не работает ... – Haris

+1

Важно подчеркнуть: ** Это не массив **. Он не будет вести себя как массив. Если в любой момент вы выберете элемент «LI» из HTML, его запись будет «выбита» из коллекции, все выше нее сдвинется вниз, чтобы заполнить пробел, а «.length» будет уменьшаться. Это не подходящее решение для тех, кто хочет создать «массив», и это может быть достигнуто только путем итерации через элементы или [преобразования его в массив] (http://stackoverflow.com/questions/222841/most- эффективный способ, к обращенным-ан-HTMLCollection-к-в-массиве). –

11

После того как прошло несколько лет, вы можете сделать это сейчас с ES6 Array.from (или spread syntax):

const navbar = Array.from(document.querySelectorAll('#navbar>ul>li')); 
 
console.log('Get first: ', navbar[0].textContent); 
 

 
// If you need to iterate once over all these nodes, you can use the callback function: 
 
console.log('Iterate with Array.from callback argument:'); 
 
Array.from(document.querySelectorAll('#navbar>ul>li'),li => console.log(li.textContent)) 
 

 
// ... or a for...of loop: 
 
console.log('Iterate with for...of:'); 
 
for (const li of document.querySelectorAll('#navbar>ul>li')) { 
 
    console.log(li.textContent); 
 
}
.as-console-wrapper { max-height: 100% !important; top: 0; }
<div id="navbar"> 
 
    <ul> 
 
    <li id="navbar-One">One</li> 
 
    <li id="navbar-Two">Two</li> 
 
    <li id="navbar-Three">Three</li> 
 
    </ul> 
 
</div>

+0

альтернатива, но кажется излишне сложной – commonSenseCode

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