2012-05-14 1 views
18

Ich habe eine ungeordnete Liste.In jQuery, wie wähle ich Elemente zwischen Elementen mit bestimmten Klassen?

<ul> 
    <li class="foo">Baz</li> 
    <li>Select Me!</li> 
    <li>Select Me!</li> 
    <li>Select Me!</li> 
    <li class="bar">Baz</li> 
    <li>Don't Select Me</li> 
    <li>Red Herring List Item</li> 
</ul> 

Wie wähle ich die Listenelemente zwischen den Listenelementen mit Klassen foo und bar mit jQuery? Ich kenne den Inhalt von Listenelementen nicht. Ich weiß auch nicht, wie viele Listenelemente ausgewählt werden müssen, damit ich mich nicht auf eine Zählung verlassen kann.

+1

[ '$ ('li.bar') prevUntil (. "li.foo") ' ] (http://api.jquery.com/prevUntil/) – Orbling

+1

Auschecken Sie den Quellcode in meiner Antwort, wenn es Sie interessiert ... – gdoron

Antwort

12
var $elements = $('.bar').prevUntil('.foo'); 

Oder andersrum:

var $elements = $('.foo').nextUntil('.bar'); 

Demo


Wenn Sie Interesse zu wissen, dass, wie es implementiert ist, check out the source code:

nextUntil: function(elem, i, until) { 
    return jQuery.dir(elem, "nextSibling", until); 
}, 
prevUntil: function(elem, i, until) { 
    return jQuery.dir(elem, "previousSibling", until); 
},​ 

dir: function(elem, dir, until) { 
    var matched = [], 
     cur = elem[dir]; 

    while (cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery(cur).is(until))) { 
     if (cur.nodeType === 1) { 
      matched.push(cur); 
     } 
     cur = cur[dir]; 
    } 
    return matched; 
},​ 
+0

+1 für zwei Wege. – VisioN

+1

@VisioN. Ich dachte für die DEMO, es ist schön, Farbwechsel ... ** 2012 ** – gdoron

+0

Wo ist Farbanimation? Ich habe besser gesehen: P – VisioN

2

Versuchen,

$('li.bar').prevUntil('.foo') 

DEMO

2
var index1 = $('li.foo').index(), 
    index2 = $('li.bar').index()-1; 

    $('li:gt('+ index1+'):lt('+ index2+')', 'ul'); 

oder $('li.foo').nextUntil('li.bar');

oder $('li.bar').prevUntil('li.foo');

Verwandte Themen