2013-08-21 3 views
0

Я пытаюсь разбить несколько ul, которые имеют один и тот же класс «dropdown_4columns». Я хочу обернуть каждый 15-й элемент li в div под названием «column». Используемый сценарий делает это на самом деле, но захватывает элементы li из следующих ul drop_4columns. Итак, как я могу просто разделить элементы li только для текущего списка. Я не могу использовать столбцы css3 и не могу изменять классы или идентификаторы. Все это генерируется автоматически! Я пытался использовать ближе, найти и $ это, но без удачи :(разбить неупорядоченные списки с тем же классом

<ul class="nav clearfix"> 
    <li class="item"> 
    <ul class="dropdown_4columns"> 
     <li></li> 
     <li></li> 
     <li></li> 
     <li></li> 
     <li></li> 
     <li></li> 
     <li></li> 
     <li></li> 
    </ul> 
    </li> 
    <li class="item"> 
    <ul class="dropdown_4columns"> 
     <li></li> 
     <li></li> 
    </ul> 
    </li> 
    <li class="item"> 
    <ul class="dropdown_4columns"> 
     <li></li> 
     <li></li> 
     <li></li> 
     <li></li> 
     <li></li> 
     <li></li> 
     <li></li> 
    </ul> 
    </li> 
</ul> 

Jquery

$().ready(function(){ 

    var divs = $("ul.dropdown_4columns > li"); 
    for(var i = 0; i < divs.length; i+=15) { 
    divs.slice(i, i+15).wrapAll("<div class='column'></div>"); 
    } 
}); 
+0

нормально, в первую очередь, '$(). Готовы (функция() {' должен быть '$ (документ) .ready (функция() {' – pythonian29033

+0

@ pythonian29033: Хорошо, вы правы, но это не вопрос;) – Meules

+0

@ pythonian29033 Это также может быть' $ (function() {...}); ';) –

ответ

1

Вам необходимо пройти через в ULS и затем перебрать Lis:

$(".dropdown_4columns").each(function)) { 
    var divs = $(this).children("li"); 
    //split code here 
}); 

(тестировался, просто для концепции)

+0

Thx, это работает! – Meules

1

попробовать это так:

var divs = $("ul.dropdown_4columns").first().find("li"); 

Ye, если вы хотите, чтобы все, то вот так:

$("ul.dropdown_4columns").each(function(){ 
    $(this).find("li")... 
}); 
+1

Что это должно было делать? – j08691

+0

не хватал следующую улицу с тем же классом ... – reyaner

+0

@reyaner: А, ладно, вот и все! Итак, в основном выберите первый доступный ?! Я приму это как правильный ответ ... thx! – Meules

1

Вы можете сделать это:

$('.dropdown_4columns').each(function() { 

    // Check the number of lis in each div with class 'dropdown_4columns' 
    // This is for debug purpose only, you can remove it if you want.. 
    console.log('Length: ' + $(this).children('li').length); 

    // Get all the lis in each div with class 'dropdown_4columns' 
    var divs = $(this).children('li'); 

    // Use your code now 
    for (var i = 0; i < divs.length; i += 15) { 
     divs.slice(i, i + 15).wrapAll("<div class='column'></div>"); 
    } 
}); 

LIVE DEMO

1

хорошо вот код вы ищете:

$(document).ready(function(){ 
    $("ul.dropdown_4columns").each(function(){ 
     var fifteenthLi = $(this).children("li").eq(14); 
     fifteenthLi.replaceWith("<div class='column'>" + fifteenthLi[0].outerHTML + "</div>") 
    }); 
}); 
1

Утонченный и простой ... работает как очарование.

var items = $('.dropdown_4columns li'); 
$.each(items,function(i,v) { 
    if (i == 14) $(this).wrapAll('<div class="column"></div>'); 
}); 

jsFiddle

или

$('li:eq(14)').filter(function() { 
    return $(this).parent().hasClass('dropdown_4columns'); 
}).wrapAll('<div class="column"></div>'); 
+0

Правда, он работает как шарм. Но вопрос: «Так как я могу просто разделить элементы li только для текущего списка» *. Итак ... каждый 15-й элемент в данном списке. (Тем не менее, +1 для чистого кода) – Richard

Смежные вопросы