2

順序付けられていないリストがあり、中にいくつかのリストアイテムがあります。それらのそれぞれの中にはリンクがあります。私がやりたいのは、誰かがその中のリンクをクリックしたときにリストアイテムの位置を見つけることです。

たとえば、誰かが3番目のリストアイテム内のリンクをクリックすると、値は3になります。

私はすでにクリック部分を持っています、ただリストアイテムの位置を取得する方法を理解する必要があります

Javascriptのみ

4

3 に答える 3

5

これはあなたが望むことをする簡単なライブの例です(リストにリンクがないことを除いて)

http://jsfiddle.net/8k926/2/

[結果]ボックスで、リスト項目の1つをクリックします。シーケンス番号をポップアップするハンドラーがあります。

Javascriptコードは次のとおりです

var els = document.getElementsByTagName('li');

Array.prototype.forEach.call(els,function(el,i){
    el.addEventListener('click', function(){alert(i);}, false);
  }) ;

配列のようなものですがels、メソッドはありませんforEachArray.prototype.forEachメソッドを使用してそれを回避します。

更新:これは、すべてのリストアイテムではなく、特定のリストに物事を絞り込む2番目のライブ例です。

http://jsfiddle.net/8k926/3/

また、コメント投稿者が指摘しているように、forEach普遍的にサポートされているわけではありませんが、ここではコードを簡略化するために使用されています。

于 2011-04-27T00:27:21.430 に答える
0

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;
});
于 2011-04-27T02:38:15.387 に答える
0
// 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
于 2011-04-27T01:30:06.503 に答える