2012-05-11 22 views
5

私はそれは私がそれを含めることができる方法<div class="item-sibling">1</div>jquery count兄弟は正しい結果を返しませんか?

が含まれていません?siblingによってクラス

HTML、

<div class="item-sibling">1</div> 
<div class="item-holder"><div class="item-sibling">2</div></div> 
<div class="item-holder"><div class="item-sibling">3</div></div> 
<div class="item-holder"><div class="item-sibling">4</div></div> 
<div class="item-holder"><div class="item-sibling">5</div></div>​ 

jqueryの、

var len = $('.item-sibling').siblings().css({background:'red'}).length; 
alert(len);​​​​ // return 4 

をカウントしたいですか

jsfiddle link

と私は

<div class="item-sibling">0</div> 
<div class="item-sibling">1</div> 
<div class="item-holder"><div class="item-sibling">2</div></div> 
<div class="item-holder"><div class="item-sibling">3</div></div> 
<div class="item-holder"><div class="item-sibling">4</div></div> 
<div class="item-holder"><div class="item-sibling">5</div></div> 

にHTMLを変更した場合、私は6この時間を取得します。奇妙な!

EDIT、

<div class="group-a"> 
    <div class="item-sibling">1</div> 
    <div class="item-holder"><div class="item-sibling">2</div></div> 
    <div class="item-holder"><div class="item-sibling">3</div></div> 
    <div class="item-holder"><div class="item-sibling">4</div></div> 
    <div class="item-holder"><div class="item-sibling">5</div></div>​ 
</div> 


<div class="group-b"> 
    <div class="item-sibling">1</div> 
    <div class="item-holder"><div class="item-sibling">2</div></div> 
    <div class="item-holder"><div class="item-sibling">3</div></div> 
</div> 

同じクラスと一連のグループがあり、私は最初のグループインスタンスの動的対象グループの兄弟をカウントします。

+0

兄弟+ 1 = – musefan

+1

すべて '.item-sibling'要素が、最初に答えます1つは兄弟を持っています...あなたは最初の '.item-sibling'要素の兄弟である4つの.item-holder要素を持っています。他のすべての '.item-sibling'要素には兄弟はありません。私はあなたが正しい用語を得ていないと思う...あなたの実際の問題は何ですか?あなたはそのコードで何を達成しようとしていますか? * edit:*最初の2つの '.item-sibling'要素の兄弟の和集合を得るため、6つの要素が得られます。 –

+0

あなたは何番の番号を探していますか? 'item-sibling'のクラスを持つ要素の数を数えるには' $( '。item-sibling')。lenght' – ManseUK

答えて

8

編集

var len = $('.item-sibling').siblings().andSelf().css({background:'red'}).length; 

それとも...

var len = $('.item-sibling').parent().children().css({background:'red'}).length; 

を行うことができますあなたの更新を読んだ後、私は次のことを示唆している:

1)は、一般的な追加します"group"クラスを各グループに追加します。例えば、

<div class="group group-a"> 
    ... 
</div> 

2)次に、すべての "兄弟" を見つけるために、そのクラスを利用する:

var len = $('.item-sibling:first').closest('.group') 
    .find('.item-sibling').css({background:'red'}).length; 
+0

私は結果として '9'を得て、それは' 5'でなければなりません... – laukok

+0

@lauthiamkok:あなたの解決策を見つけようとするのではなく、あなたの実際の問題点を説明してください。たぶん、あなたは '.siblings()'を必要としません。 '.item-sibling'要素を数えたいだけですか? –

+0

更新された質問を読んだ後、@ Felixに同意する必要があります。あなたが記述していることは、実際の兄弟ではありません。あなたの問題では、何が兄弟を定義しますか?この時点で本当に説明したのは、同じクラスを持つすべての要素です。これは '$( '。item-sibling')。length'です。 – jmar777

2

兄弟が他人ているためです。フェッチされたセットに対するターゲット要素を含むjQuery andSelf()を試してください。

var len = $('.item-sibling') 
    .siblings() 
    .andSelf() 
    .css({background:'red'}) 
    .length; 

そして、あなたが持っている第二HTML、あなたは01ある2 .item-siblingを持っています。 jQueryは、0の兄弟(.item-holder1を含む)と1の兄弟(.item-holder0を含む)を取得します。

+1

['andSelf'](http://api.jquery.com/andSelf/)はJQuery 1.8以降では廃止されました。代わりに[' addBack() '](http://api.jquery.com/addBack /)。 – johntrepreneur

1

jqueryの文書によると、

"元の要素は兄弟の間には含まれていません。DOMツリーの特定のレベルですべての要素を検索するときに覚えておくことが重要です。"

REF:あなたはなぜちょうど

$('.item-sibling').length; 

をしないで、クラス= "アイテム兄弟" で、すべてのdivをカウントしたい場合http://api.jquery.com/siblings/

0

これは、すべての5つのdivを数えるのでしょうか?

2

今、私たちは、あなたがグループへの参照を持っている場合、あなたは、単に行うことができます、あなたが望むものを明確にすることを、[OK]を:

var items = $group.find('.item-sibling').length; 

あなたは.item-sibling要素への参照を持っている場合は、操作を行います。

var items = $item.closest('.group').find('.item-sibling').length; 

これは、各グループに共通のクラスがあることを前提としています。

あなたは、各グループの要素数のリストを取得したい場合は、それぞれのグループを反復処理する必要があります。

var num_items = $('.group').map(function() { 
    return $(this).find('.item-sibling').length; 
}).get(); 
+0

Felixさん、ありがとうございました。私は今でも 'var len = $( 'item-sibling')という解決策を持っています。 \t \tアラート(len); 'おそらくあなたのものほど良くはないが動作する。 – laukok

+1

'.siblings()'をなぜ使い続けているのか分かりませんが、お楽しみにしているのですが、 –

+0

私の間違いは、 – laukok

関連する問題