2010-08-02 14 views
5

Yığın akışında bir üyenin önerdiği ve her 3 liste öğesinin bir mega menüsünün parçası olarak sarılması için benim tarafımdan uyarlanmış bir kod kullanıyorum. kodudur:.slice ve .wrapall

var lis = $("ul > li"); 
for(var i = 0; i < ls.length; i+=3) { 
    lis.slice(i, i+3).wrapAll("<div class='new'></div>"); 
} 

Ne yazık ki bu bir div 3 li en hakkındaki 'kotasını' doldurmak için bir sonraki ana menüden alt li en çekecek. Bu, elbette menülerimi büyük çapta karıştırıyor. Bir örnek için lütfen burayı ziyaret edin.

Bunu düzeltmek için herhangi bir öneriniz var mı?

+1

Ne demek '>' 'ul> li'? –

cevap

6

Senin sorunun sizin seçicidir . sizzle sağdan sola doğru çalıştığından, yalnızca UL element olan ve doğrudan ana öğe olan LI elements'u sorgulayacaktır (genellikle, her zaman böyle olur).

ULs'u ayırın.

$('ul').each(function(){ 
    var $lis = $(this).children('li'); 
    for(var i = 0, len = $lis.length; i < len; i+=3){   
    $lis.slice(i, i+3).wrapAll("<div class='new'></div>"); 
    } 
}); 
+0

Bilgi için teşekkürler Andy - özür dilerim ama jQuery için çok yeni. Söylediklerinizin ardındaki mantığı anlıyorum ama unfortuantley, yukarıda belirttiğim demo üzerinde çalıştığınız kod parçacığını alamıyorum ... Ayrıca bu bir sayfadaki her 3 lıyi sarmalayamaz mı? Ul.list-içeriğini ul olarak belirtmek daha iyi olur mu? – csbourne

+0

hmmn - herhangi bir öneriniz için teşekkürler. Senin için çalışıyor mu? – csbourne

+0

@csbourne: http://www.jsfiddle.net/cbnFX/ adresinden kandırıyorum. En azından ne beklediğimi yapıyor :) Ama o eklenti yok. – jAndy

0

Sınıfın ht seçicisi olarak kullanılmasının bu şekilde uygulanmasını denediniz mi?

var lis = $("ul.list-content > li"); 
for(var i = 0; i < lis.length; i+=3) { 
    lis.slice(i, i+3).wrapAll("<div class='new'></div>"); 
} 

Ama bilmiyordu, ben .. İyi .. değil ul üzerinde div koyuyoruz sen dom ayrılıyorlarmış diye uyarıyorum;)

İlgili konular