順序付けられていないリストがあり、中にいくつかのリストアイテムがあります。それらのそれぞれの中にはリンクがあります。私がやりたいのは、誰かがその中のリンクをクリックしたときにリストアイテムの位置を見つけることです。
たとえば、誰かが3番目のリストアイテム内のリンクをクリックすると、値は3になります。
私はすでにクリック部分を持っています、ただリストアイテムの位置を取得する方法を理解する必要があります
Javascriptのみ
順序付けられていないリストがあり、中にいくつかのリストアイテムがあります。それらのそれぞれの中にはリンクがあります。私がやりたいのは、誰かがその中のリンクをクリックしたときにリストアイテムの位置を見つけることです。
たとえば、誰かが3番目のリストアイテム内のリンクをクリックすると、値は3になります。
私はすでにクリック部分を持っています、ただリストアイテムの位置を取得する方法を理解する必要があります
Javascriptのみ
これはあなたが望むことをする簡単なライブの例です(リストにリンクがないことを除いて)
[結果]ボックスで、リスト項目の1つをクリックします。シーケンス番号をポップアップするハンドラーがあります。
Javascriptコードは次のとおりです
var els = document.getElementsByTagName('li');
Array.prototype.forEach.call(els,function(el,i){
el.addEventListener('click', function(){alert(i);}, false);
}) ;
配列のようなものですがels
、メソッドはありませんforEach
。Array.prototype.forEach
メソッドを使用してそれを回避します。
更新:これは、すべてのリストアイテムではなく、特定のリストに物事を絞り込む2番目のライブ例です。
また、コメント投稿者が指摘しているように、forEach
普遍的にサポートされているわけではありませんが、ここではコードを簡略化するために使用されています。
jQueryの使用:リスト内のすべてのリンクにクリックイベントを追加します。これは、最初にリンクの親の「li」要素を選択し、次に、選択する要素がなくなり、空のjqueryオブジェクトが返されるまで、各「li」要素を逆方向に選択します。適応しやすいはずです。
$('li a').click(function(){
$node = $(this).parent();
result = 0;
while ($node.length > 0){
result++;
$node = $node.prev();
}
alert(result);
return false;
});
// A ul only has li childnodes.
count 'backwards' from the li element containing the clicked link.
var count= 1, li= linkelement;
while(li && li.nodeName!= 'LI') li= li.parentNode; // get the li element
while(li){
li= li.previousSibling;
// count previous li elements
++count;
}
alert(count)// firstChild is 1, not 0