2012-05-14 166 views
18

我有一個無序列表。在jQuery中,如何選擇具有某些類的元素之間的元素?

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

如何在使用jQuery的類foo和bar列表項之間選擇列表項之間的列表項?我不知道任何列表項的內容。我也不知道需要選擇多少個列表項,所以我不能依賴一個計數。

+1

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

+1

檢出我的答案中的源代碼,如果它很有趣你... – gdoron

回答

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

或者其他方式:

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

Demo


如果你位數的知道它是如何實現的,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,很好,顏色變化...... ** 2012 ** – gdoron

+0

彩色動畫在哪裏?我見過更好:P – VisioN

2

嘗試,

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

DEMO

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

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

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

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

相關問題