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、要素のグループ (構造のような配列、HTMLCollectionまたはNodeListfirstChildの可能性があります) であり、 (またはその他のElementプロパティ)はありません。すべての を反復処理するlistItemsか、@Cherniv が提案したことを実行して、 から直接アンカーを取得する必要があります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 に答える