2010-08-02 4 views
5

Я использую немного кода, предложенного участником в stackoverflow и адаптированный мной, чтобы обернуть каждые 3 элемента списка как часть мега-меню. Код:.slice и .wrapall

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

К сожалению, это будет захватывать ребенок Ли из следующего меню родительского завалить «квоту» на 3 Ли в делах. Это, конечно же, массовое испортить мои меню. Для примера, пожалуйста, посетите здесь.

Есть ли у кого-нибудь предложения, как я мог это исправить?

+1

Что делать, если вы удалите '>' из 'ul> li'? –

ответ

6

Ваша проблема ваш селектор , Так как sizzle работает справа налево, он просто запросит все LI elements, у которых есть UL element как прямой родительский (обычно это всегда так).

Итак, отделите свой 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

Спасибо за информацию Энди - извинения, но я очень новичок в jQuery. Я думаю, что я понимаю логику того, что вы говорите, но, к сожалению, я не могу получить фрагмент кода, который вы отправили, работая над демонстрацией, которую я включил выше ... Кроме того, это не закончило бы обертывание каждые 3 ли на странице? Было бы лучше указать ul.list-content как ul? благодарит за любые советы – csbourne

+0

hmmn - извините, до сих пор нет радости с кодом выше. Работает ли это для вас? – csbourne

+0

@csbourne: ну, я обманываю себя на http://www.jsfiddle.net/cbnFX/ Это по крайней мере делает то, что я ожидаю :) Но у меня нет такого плагина. – jAndy

0

Вы пробовали применить его к использованию класса как селектор ht?

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

Но если вы не знаете, я предупреждаю вас, что вы нарушаете РОМ .. вы ставите DIV на ул что не есть хорошо ..;)