2011-09-05 24 views
33

私はこのコードを持っている:jQueryで兄弟を1つだけ選択する方法は?

<ul> 
    <li class="foo">foo text</li> 
    <li class="foo2">foo2 text</li> 
    <!-- more li here --> 
    <li class="bar">bar text</li> 
    <li class="bar2">bar2 text</li> 
    <!-- more li here --> 
    <li class="baz">clickme!</li> 
</ul> 

$(".baz").click(function() { 
    alert("test: " + $(this).siblings(".bar")[0].text()); // Doesn't work 
}); 

siblings(".bar")[0]は動作しません。 (警告ボックスは表示されず、JavaScriptエラーもありません)

兄弟だけを選択する適切な方法は何ですか?

jsFiddle try

編集:私はprev()またはnext()を使用したくありません。

+1

を参照することができ、良い質問バッジを持っています。これは兄弟を特定のクラスに制限する方法の例を見つけることができる唯一の場所です。 – ouflak

+0

@ouflakよろしくお願いします。 –

答えて

48

$(this).siblings(".bar").eq(0).text() 

セット内の最初の要素を選択します。あなたが探している要素がクリックされた要素の前に直接来るようあなたのケースでは、あなたは単に、prevを使用することができます。

$(this).prev(".bar").text() 

あなたが使用していた配列表記法の問題点は、それが実際のDOMノードを返すということですjQueryオブジェクトに含まれており、それはtextメソッドを持たないでしょう。 eqはこれを行うための同等のjQueryメソッドです。

+0

ありがとう、私は 'eq()'を探していました。 Btw、それはどういう意味ですか? –

+2

@pinouchon:ドキュメントを読み、見つけてください。ジェームスはあなたにもリンクを渡してくれたので、Googleで「jQuery eq」を入力する必要はありません。 –

+1

私は医者の中で見つけられなかったので私は尋ねています。 –

2

あなたは次の()またはPREV()を使用することができます。

$(".baz").click(function() { 
    alert("test: " + $(this).prev(".bar").text()); 
}); 

あなたが特定のインデックスに1つに要素のマッチしたセットを減らすためにeqメソッドを使用することができ、ここでフィドルhttp://jsfiddle.net/fMT5x/2/

10

あなたはまた、最初に使用してjQueryオブジェクトのうちの最初の要素をつかむことができます。

alert(siblings(".bar").first().text()); 
1

あなたがいずれかを行うことができます。

$(".baz").click(function() { 
    alert("test: " + $(this).prev.html()); 
}); 

しかし、あなたは前のアイテムが存在することを確認する必要があり

OR(ファイン)

$(".baz").click(function() { 
    alert("test: " + $(this).siblings(".bar").eq(0).text()); 
}); 
を.bazします

OR(より悪い)、ちょうど参考のために、それを使用することはありません:)

$(".baz").click(function() { 
    var text = 0; 
    $(this).siblings(".bar").each(function(){ text = $(this).text(); break; }); 
    alert("test: " + text); 
}); 
関連する問題