2010-11-17 3 views
1

У меня есть два набора неупорядоченных списков с тем же именем класса, и я хочу подмножить его с помощью jquery slice.jquery - как срезать элементы в двух разных неупорядоченных списках?

var currentCount= 0; 
var maxCount= 3; 
$('.ulClassName>li').slice(currentCount,maxCount).show(); 

Это отлично работает для первого UL (это показывает только первые три списка), но не разрезают второй UL с тем же именем класса. Ниже разметка:

<ul class="ulClassName" id="firstUL"> 
<li>Blah blah1 </li> 
<li>Blah blah2 </li> 
<li>Blah blah3 </li> 
<li>Blah blah4 </li> 
<li>Blah blah5 </li> 
<li>Blah blah6 </li> 
</ul> 
<ul class="ulClassName" id="secondUL"> 
<li>Blah blah1 </li> 
<li>Blah blah2 </li> 
<li>Blah blah3 </li> 
<li>Blah blah4 </li> 

Я понимаю, что JQuery индексирует весь список элементы на странице, я не хочу писать отдельный код для двух списков, может кто-нибудь мне помочь?

ответ

4

Вы можете позвонить:

$('.ulClassName').each(function() { 
    $(this).find('li').slice(currentCount, maxCount).show(); 
}); 
+0

Ofcourse! Большое спасибо, вы спасатель! – praveenius

0

Альтернативой является использование nth-child селектор в сочетании с nextAll, чтобы избежать использования slice, который действует на всей совокупности все сразу:

$('.ulClassName > li:nth-child(4)').prevAll().show(); 

Альтернативно,

$('.ulClassName > li:nth-child(3) ~ li').hide(); 

(Это скрывает все под третьим li элемента, который отличается от первого, но должно быть более эффективным, поскольку ~ li может быть оценена document.querySelectorAll() для современных браузеров)

0
$('ul.sideFilter').each(function(){ 

$(this).find('li').slice(5).wrap("<ul></ul>"); 


}); 
+2

Вы должны действительно добавить некоторые комментарии без кода, описывающие ваш ответ. –

+0

Кроме того, поскольку ваш ответ очень похож на тот, который уже был принят, вы должны указать, почему ваше решение может быть отнесено. – mah

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