2012-05-11 13 views
5

Ich möchte, die sibling von Klassen zählenjquery count Geschwister gibt das korrekte Ergebnis nicht zurück?

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 

es nicht <div class="item-sibling">1</div> enthält

wie kann ich es aufnehmen?

jsfiddle link

und wenn ich die html,

ändern
<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> 

werde ich 6 diesmal bekommen. Seltsam!

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> 

Es ist eine Reihe von Gruppen mit der gleichen Klasse, und ich mag die erste Gruppe eine Zielgruppe Geschwister dynamisch zum Beispiel zählen.

+0

Geschwister + 1 = Antwort – musefan

+1

Alle '.item-sibling' Elemente aber die erste man hat Geschwister ... Sie haben 4 '.item-holder' Elemente, die die Geschwister des ersten' .item-Geschwister'-Elements sind. Alle anderen '.item-Geschwister'-Elemente haben keine Geschwister. Ich denke, Sie haben die Terminologie nicht richtig verstanden ... Was ist eigentlich Ihr Problem? Was versuchen Sie mit diesem Code zu erreichen? * edit: * Im anderen Fall erhalten Sie 6 Elemente, weil Sie die Vereinigung von Geschwistern der ersten beiden '.item-Geschwisterelemente 'erhalten. –

+0

Welche Nummer suchen Sie? um die Anzahl der Elemente mit der Klasse 'item-sibling' zu zählen, benutze' $ ('. item-sibling'). length' – ManseUK

Antwort

8

Sie tun können

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

Oder ...

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

Edit: nach der Aktualisierung zu lesen, würde ich vorschlagen, die folgenden:

1) Fügen Sie ein generisches "Gruppe" -Klasse für jede Gruppe. Z. B.

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

2) Dann nehmen Sie Vorteil dieser Klasse alle "Geschwister" zu finden:

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

danke, jmar. Ich bekomme aber '9' als Ergebnis und es sollte' 5' sein ... – laukok

+0

@lauthiamkokkok: Anstatt zu versuchen, eine Lösung für Ihre Lösung zu finden, erklären Sie bitte, was Ihr tatsächliches Problem ist. Vielleicht brauchst/willst du '.siblings()' überhaupt nicht! Willst du nur die '.item-Geschwister 'Elemente zählen? –

+0

Nachdem ich deine aktualisierte Frage gelesen habe, muss ich @Felix zustimmen - was du beschreibst ist nicht wirklich Geschwister. Was definiert ein Geschwister in Ihrem Problem? Was Sie an dieser Stelle wirklich beschrieben haben, sind nur alle Elemente mit der gleichen Klasse ... die nur '$ ('. Item-sibling'). Length 'wäre. – jmar777

2

Es ist, weil Geschwister sind die andere. Versuchen Sie jQuery andSelf(), die das Zielelement in die abgerufene Menge enthält.

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

Und die zweite HTML Sie haben, haben Sie 2 .item-sibling die 0 und 1 sind. jQuery bekommt 0 's Geschwister (.item-holder, einschließlich 1) und 1' s Geschwister (.item-holder, einschließlich 0), was 6 insgesamt macht.

+1

['andSelf'] (http://api.jquery.com/andSelf/) ist jetzt ab JQuery 1.8 veraltet und es wird ersetzt durch' 'addBack()'] (http://api.jquery.com/addBack /). – johntrepreneur

1

Laut jquery Dokumentation.

"Das ursprüngliche Element ist nicht unter den Geschwistern enthalten, was zu beachten ist, wenn wir alle Elemente auf einer bestimmten Ebene des DOM-Baums finden möchten."

ref: http://api.jquery.com/siblings/

0

Wenn Sie alle divs mit class = "item-Geschwister" zählen wollen, warum nicht einfach tun

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

Dies wird alle 5 divs zählen?

2

Ok, jetzt, wo wir klären, was Sie wollen, wenn Sie einen Verweis auf die Gruppe haben, können Sie einfach tun:

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

Wenn Sie einen Verweis auf das ein .item-sibling Element haben, tun:

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

Dies setzt voraus, dass jede Gruppe eine gemeinsame Klasse hat.

Wenn Sie eine Liste der Anzahl der Elemente in jeder Gruppe erhalten möchten, müssen Sie über jede Gruppe durchlaufen:

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

Danke Felix, ich habe jetzt auch eine Lösung 'var len = $ ('. Item-sibling'). Unwrap(). Siblings(). Css ({background: 'red'}). \t \t alert (len); 'vielleicht nicht so gut wie deins, aber es funktioniert. – laukok

+1

Ich verstehe nicht, warum Sie '.siblings()' weiter verwenden, aber wenn Sie Spaß damit haben;) –

+0

mein Fehler, weiter mit Geschwister zu machen :-) – laukok

Verwandte Themen