0

我正在尝试从列表中获取所有锚标记并通过遍历 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>
4

3 回答 3

2

为什么不继续合作getElementsByTagName

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

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

于 2013-08-03T14:52:48.000 回答
1

你的问题就在这里;

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

getElementsByTagName()返回一个集合,listItemAnchors一组元素(类似数组的结构,可以是HTMLCollectionNodeList)也是如此,并且没有firstChild(或任何其他Element属性)。listItems您必须遍历所有list.

如果您想要每个li. 否则@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);
于 2013-08-03T15:25:15.927 回答
0
myArray=[];
var elements = document.getElementsByTagName('a');
for (var i = 0; i < elements.length; i++) {
    myArray.push(elements[i].innerHTML)
}
于 2013-08-03T15:00:08.070 回答