2010-08-02 10 views
5

Sto usando un po 'di codice suggerito da un membro su stackoverflow e adattato da me per avvolgere ogni 3 voci di elenco come parte di un mega menu. Il codice è:.slice e .wrapall

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

Purtroppo questo catturerà bambino Li dal menu principale accanto al riempire il 'quota' di 3 Li in un div. Ovviamente questo è un grosso problema per i miei menu. Per un esempio visita qui.

Qualcuno ha qualche suggerimento su come risolvere il problema?

+1

Cosa succede se si rimuove il '' 'da' ul> li'? –

risposta

6

Il tuo problema è il vostro selettore . Dal momento che sizzle funziona da destra a sinistra, verrà eseguita una query su tutti gli LI elements che hanno uno UL element come genitore diretto (che di solito è sempre il caso).

Quindi, separare il ULs.

$('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

Grazie per le informazioni Andy - mi scuso ma sono molto nuovo a jQuery. Penso di capire la logica dietro quello che stai dicendo, ma sfortunatamente non sono in grado di ottenere lo snippet di codice che hai inviato lavorando alla demo che ho incluso sopra ... Inoltre, questo non finirà per avvolgere ogni 3 li in una pagina? Sarebbe meglio specificare il contenuto di ul.list come l'ul? grazie per qualsiasi consiglio – csbourne

+0

hmmn - scusa ancora nessuna gioia con il codice sopra. Per te funziona? – csbourne

+0

@csbourne: beh sto scherzando su http://www.jsfiddle.net/cbnFX/ Almeno fa quello che mi aspetto :) Ma non ho quel plugin disponibile lì. – jAndy

0

hai provato ad applicarlo con l'uso della classe come selettore ht come questo?

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>"); 
} 

Ma se non lo sapevate, ti avverto che si sta rompendo la dom .. si sta mettendo su div ul che non è buono ..;)

Problemi correlati