2016-12-25 9 views
0

javascript内で選択した要素または 'elems [i]'のインデックスを取得するにはどうすればよいですか?私はこれが非常に単純な質問であることを知っているので、買うべきコースや講習するコースの提案は非常に高く評価されます。ありがとう!Javascript配列からインデックスを取得する

コード:

<html> 
<body> 
    <table> 
    <tr id="subject"><?php 
    $subjects = array("IT","Programming","Networks"); 
    foreach($subjects as $key => $value) { 
    echo "<td>"."<a href='index.php' class='column'>".$value."</a>"."</td>"; 
    }  
    ?></tr> 
    </table> 
</body> 


<script type="text/javascript"> 

    var elems = document.getElementsByClassName('column'); 
    for (var i = 0; i < elems.length; i++) { 
     elems[i].onclick = function() { 
      console.log(this.innerHTML); 
     }; 
    } 

</script> 
+1

"選択された要素"とはなんですか?あなたは何をしようとしているのですか? – Dekel

+0

これはお探しですか? https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf –

+0

"_the selected element_"を定義してください。あなたは現在ループ中の手にある要素を意味しますか?または、クリックされた要素ですか?また、 'getElementsByClassName'は配列を返しません、それはHTMLCollectionを返します。 – Teemu

答えて

1
var elems = document.getElementsByClassName('column'); 
for (var i = 0; i < elems.length; i++) { 
let a=i;//the magic happens 
elems[i].onclick = function() { 
console.log(a); 
}; 
} 

参照クロージャは、ES6をしましょう。 (古いブラウザ用)

オプション2:

 var elems = document.getElementsByClassName('column'); 
for (var i = 0; i < elems.length; i++) { 
(function(){ 
var a=i; 
elems[i].onclick = function() { 
console.log(a); 
}; 
})(); 
} 

あなたはハンドラのスコープにインデックスを配置する必要があり、ブロックスコープ(聞かせて、最初の答え)、または新しいスコープを作成することによって、のいずれかを使用してトラフは、生命維持の谷... は

溶液(あなたは、各ハンドラのための独自のスコープを作成する必要があります)3: 設定DOMは、オブジェクトID:

elems[i].id=i; 
elems[i].onclick=function(){ 
    alert(this.id); 
}; 

解決策4: インデックスを動的に取得する:

alert(elems.indexOf(this)); 
+0

は配列内の要素の量だけを出力します。選ばれたインデックスを表示したい。 – Solomon

+0

@Solomon:nope。その魔法は... –

+0

解決策3は私のために働くように見えました。あなたのすべての協力に感謝します!! – Solomon

関連する問題