遍历DOM,将带有ID的<ul>的所有锚标记放入数组</ul>

时间:2013-08-03 14:50:31

标签: javascript dom

我正在尝试从列表中获取所有锚标记并通过遍历DOM放入数组中, 我已经能够将列表项和他们的.innerHTML放到一个数组中,但是更进了一步 得到每个LI的锚标签不起作用。我已经评论了哪些行不起作用

<ul id="menu-list">
<li><a href="#">List Item 1</a></li>
<li><a href="#">List Item 2</a></li>
<li><a href="#">List Item 3</a></li>
<li><a href="#">List Item 4</a></li>                        
</ul>

<script type="text/javascript">
var list = document.getElementById('menu-list');
var listItems = list.getElementsByTagName('li'); //works
var listItemAnchors = listItems.firstChild //not working OR....
var listItemAnchors = listItems.childNode[0] //not working

var menuListItems = [];
for (i = 0; i < listItemAnchors.length; i++) {
    var arrValue = listItemsAnchors[i]
    menuListItems.push(arrValue);
    alert('item added');
}
</script>

3 个答案:

答案 0 :(得分:2)

为什么不继续使用getElementsByTagName

var listItemAnchors = list.getElementsByTagName('a');

看看:http://jsfiddle.net/cWNz8/

答案 1 :(得分:1)

你的问题在这里;

var listItemAnchors = listItems.firstChild //not working OR....
var listItemAnchors = listItems.childNode[0] //not working

getElementsByTagName()会返回一个集合,因此listItemAnchors是一组元素(类似于结构的数组,可能是HTMLCollectionNodeList)并且没有firstChild(或任何其他Element属性)。您必须遍历所有listItems,或者执行@Cherniv建议并直接从list获取锚点。

如果您只想要每个li的第一个锚点,请尝试this。否则,@ Cherniv的回答是最好的解决方案;

var list = document.getElementById('menu-list');
var listItems = list.getElementsByTagName('li');
var listItemAnchors = [];

var potentialAnchor;
//for each list item
for (var index = 0; index < listItems.length; ++index) {
    potentialAnchor = listItems[index].children[0];

    //check if it's an anchor
    if (potentialAnchor.tagName.toLowerCase() == 'a')
        listItemAnchors.push(potentialAnchor);
}

console.log(listItemAnchors);

答案 2 :(得分:0)

myArray=[];
var elements = document.getElementsByTagName('a');
for (var i = 0; i < elements.length; i++) {
    myArray.push(elements[i].innerHTML)
}