我正在尝试从列表中获取所有锚标记并通过遍历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>
答案 0 :(得分:2)
为什么不继续使用getElementsByTagName
:
var listItemAnchors = list.getElementsByTagName('a');
答案 1 :(得分:1)
你的问题在这里;
var listItemAnchors = listItems.firstChild //not working OR....
var listItemAnchors = listItems.childNode[0] //not working
getElementsByTagName()
会返回一个集合,因此listItemAnchors
是一组元素(类似于结构的数组,可能是HTMLCollection或NodeList)并且没有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)
}