2011-10-18 11 views
0

これを行うにはより良い方法です(たとえば、私は10個のa要素があるとします)。多くの要素に同じ機能を適用します(順番に)

$('#id > a:nth-child(1)').click(function() { changeP(1); return false; }); 
$('#id > a:nth-child(2)').click(function() { changeP(2); return false; }); 
$('#id > a:nth-child(3)').click(function() { changeP(3); return false; }); 

私は2つの可能性を知っているが、私は特に彼らのようにしないでください。

  1. .bind()を使用してパラメータを持つ代わりに.click()
  2. .map(return $(this))を使用して、インデックスVARと配列を反復

答えて

3

あなたはこれを行うことができます:

$('#id > a').each(function(i) { 
    $(this).click(function() { changeP(i); return false; }); 
}); 

jQueryのは、「各」関数への最初のパラメータとして選択された要素のインデックスを渡します。

+0

+1 'index()'は、いくつの兄弟要素があるかを調べるためにそれらを数えるすべての兄弟要素を渡らなければなりません。 – bobince

2

indexを使用して要素のインデックスを取得できます(その親に対して) HOD:

$("#id > a").click(function() { 
    changeP($(this).index() + 1); 
    return false; 
}); 

要素のインデックスは0から始まりますので、jQueryのメソッドは、マッチしたセット内のすべての要素に適用する傾向があるので、1本でnth-child開始が働くので、clickイベントハンドラはバウンドであるのに対し、あなたは、1を追加する必要がありますセレクタと一致するすべての要素に渡します。

+0

他の要素その間に(a ')はありませんか?その結果、間違ったインデックスにはなりませんか? –

+0

Hmm。はい、本当です... –

+0

あなたは私の答えの一部を「盗む」ことができます;)(選択した要素をキャッシュして '$ a.index(this)'を実行します)。あるいは '$(this).index("#id> a ")'にすることもできます。 –

0
$('#id > a').click(function(){ 
    changeP($(this).index(' #id > a')+1); 
    return false; 
}); 

参照:これは、他の要素がコードに挿入されている場合でもindex()

作品:

<div id="id"> 
    <a href="#">1</a> 
    <span>hello</span> 
    <a href="#">2</a> 
    <a href="#">3</a> 
    <a href="#">4</a> 
</div> 
+0

これは、 '#id> a 'だけでなく、すべての' a'要素に対するインデックスを取得します。 –

+0

更新された回答。 – artlung

0
$.each($('#id > a'), function(index) { 
    $(this).click(function() { 
    changeP(index); return false; }); 
}); 
0

あなたは)(.eachを探している:http://api.jquery.com/each/

$('#id > a').each(function(index){ 
    $(this).click(function(){ 
     changeP(index+1); 
    }); 
}); 
関連する問題