2012-05-14 21 views
18

Sırasız bir liste var.jQuery'de, belirli sınıflara sahip öğeler arasındaki öğeleri nasıl seçerim?

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

Liste öğelerini jQuery kullanarak foo ve bar sınıfları olan öğeler arasında nasıl seçerim? Herhangi bir liste öğesinin içeriğini bilmiyorum. Ayrıca seçilecek kaç liste öğesi olduğunu bilmiyorum, bu yüzden bir sayıya güvenemem.

+1

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

+1

Cevabımdaki kaynak kodunu kontrol et, eğer ilgimi çekerse ... – gdoron

cevap

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

Veya başka bir yol:

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

Demo


sen nasıl uygulandığı bilmek İntersted iseniz, 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. – VisioN

+1

@VisioN. DEMO için düşündüm, güzel, renk değiştiriyor ... ** 2012 ** – gdoron

+0

Renk animasyonu nerede? Daha iyi gördüm: P – VisioN

2

deneyin,

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

DEMO

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

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

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

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

İlgili konular