2012-03-02 16 views
16

NextUntil'i kolayca yapmanın bir yolu var mı? Böylece, seçici tarafından eşleştirilen öğe dahil edildi mi? TabiijQuery nextUntil, eşleştirilen öğeyi hariç tutmuyor mu?

$("#content").find("h3:first").prev().nextUntil("ul:last").wrapAll("<div id='collapse'></div>"); 
+1

Eğer HTML işaretlemesi ilgili bölümlerine soruyla güncelleyebilir miyim olduğunu düşünüyorum? Bu, elde etmeye çalıştığınız şeyi anlamamıza yardımcı olur. –

cevap

20

.prev() çıkarın ve seçicinin sonunda .addBack() kullanın:

$("#content").find("h3:first").nextUntil("ul:last").addBack().wrapAll("<div id='collapse'></div>"); 

Öncesi 1.8 yerine addBack

+7

Bu eski soruya asla bir cevap kabul etmemişti. FYI, şimdi bunu kontrol eden herkes: "andSelf() - Not: Bu işlev kullanımdan kaldırılmıştır ve şimdi jaduback 1.8 ile kullanması gereken .addBack() için bir takma addır." – jwinn

+0

Bu cevabı bugün keşfettim (21-07-2017) ve projemde bana yardımcı oldu, ty – samouray

-1

Eğer sadece jQuery nextAll kullanabilirsiniz: Bir önceki kardeş varsa sadece ince olan bu var.

'nextAll', bu seçiciyle eşleşen aşağıdaki öğeleri içerecektir. 'NextUntil' eşleşen seçici öğeyi hariç tutarken

.

+0

"sonraki", takip eden bir son noktaya kadar tüm kardeşleri yakaladığım halde, sadece takip eden kardeşleri alır. – jwinn

+0

evet haklısınız, cevabımı değiştiriyorum. –

+0

-1: from nextAll() ref: İsteğe bağlı olarak bir seçici tarafından filtrelenen eşleşen öğelerin kümesindeki her öğenin aşağıdaki ** kardeşlerini takip edin **. Yani, bu ** eşlenen elemanı içermeyecektir. –

1

buldum geçici çözüm length kullanılarak nextUntil (veya prevUntil), sonra nextAll() bu uzunluk + 1 slice() kullanmak bulmaktı:

var inclusiveNextUntil = $(this).nextUntil('.some-class').length; 
var inclusiveNextUntil = $(this).nextAll().slice(0 , inclusiveNextUntil + 1); 

Bu hantal ama işe yarıyor. HTH

+ * ekleyerek

FWIW in the nextAll docs Biziclop mentions:

$obj.nextUntil('.last-item-to-include + *') 

ama bu benim için çalışmaz:/

1

İşte böyle yapar. Diğer önerilerden biraz daha temiz olduğunu düşünüyorum. aşağıda gösterildiği gibi

var elearr = $('selector1').nextUntil('selector2'); 
var lastele = elearr[elearr.length-1]; 
elearr.push($(lastele).next()); 
0
var s = $("li.start").nextUntil("li.stop"); 
s = s.add(s.last().next()).add(s.first().prev()); 
//and do whatever you need to with s 

en sezgisel, sanırım ait andSelf kullanmalıdır . Tüm jQuery yöntemleri ile yapılmıştır. İki kez arama yapmaya gerek yok. Anlaması kolay ve hatırlanması kolay.

0

Ben doğru cevap

$("#content").find("h3:first").nextUntil("ul:last").addSelf().wrapAll("<div id='collapse'></div>");