Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Списки и :gt() селектор (https://javascript.ru/forum/jquery/9446-spiski-i-gt-selektor.html)

Viper 17.05.2010 14:24

Списки и :gt() селектор
 
Есть задача.
Нужно скрыть все li у которых индекс больше 4
Есть структура
<div class="filter_item">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
</div>


Пробую так
jQuery(document).ready(function($){
	var selector_elem = ".filter_item ul";
	var item_index = 4;
	$(selector_elem).each(function(){
		var items_count = $(selector_elem).children().length;
		if (items_count >= item_index) {
			$(selector_elem+" li:gt("+item_index+")").hide();
		}
	});
});


но как результат получаю либо все скрытыми, либо скрываются все li которые находятся в 2 и 3-ем списках :-E

Что странно при использовании .nth-child(n) скрывается нужный в всех списках.

micscr 17.05.2010 14:35

$('.filter_item ul').each(function(){ 
     $('li:gt(3)', this).hide();
   });

индекс - с нуля, ну сам знаешь.

Viper 17.05.2010 14:49

Цитата:

Сообщение от micscr (Сообщение 55463)
$('.filter_item ul').each(function(){ 
     $('li:gt(3)', this).hide();
   });

индекс - с нуля, ну сам знаешь.

да. спасибо. что-то я наперемудрил с кодом :write:

Viper 17.05.2010 16:36

Ещё попутный вопрос.
Добавляю ссылку в конец списка

if ($(this, 'li').children().length > 5) {
	$(this, ':last').append('<li><a href="javascript:void(0);" class="tr_more">More...</a></li>');
}


далее обрабатываю
$('a.tr_more').toggle(function(){
	$('???').show();
	$(this).attr('class', 'tr_less').text("Less...");
}, function(){
	$(this).attr('class', 'tr_more').text("More...");
});


как мне обратиться к родительскому элементу списка, чтобы при клике на ссылку показывались li только того блока ul в котором кликнули на ссылку, а не всех сразу?

e1f 17.05.2010 17:56

$(this).closest('li').siblings().show()

Viper 18.05.2010 10:06

Цитата:

Сообщение от e1f (Сообщение 55492)
$(this).closest('li').siblings().show()

почему-то не работает для hide...

...}, function(){
	var ul = $(this).closest('li').siblings();
	$('.filter_item '+ul+' li:gt(2)').hide();
	$(this).attr('class', 'tr_more').text("More...");
});


вроде бы получаем же родительский элемент списка?
да и ссылка тоже скрывается(он же последний элемент списка) :(

micscr 18.05.2010 10:25

var ul = $(this).closest('li').siblings();
ul - тут является коллекцией объектов, а не строкой. Поэтому так:
'.filter_item '+ul+' li:gt(2)'

неверно.

Еще ссылку как то странно ты добавляешь:
$(this, ':last').append

работает что ли так?

Viper 18.05.2010 11:22

Цитата:

Сообщение от micscr (Сообщение 55545)
var ul = $(this).closest('li').siblings();
ul - тут является коллекцией объектов, а не строкой. Поэтому так:
'.filter_item '+ul+' li:gt(2)'

неверно.

Еще ссылку как то странно ты добавляешь:
$(this, ':last').append

работает что ли так?

а почему не должно? это ж вроже по докам правильно.

переделал так
$('.tr_more').toggle(function(){
	$(this).closest('li').siblings().show();
	$(this).attr('class', 'tr_less').text("Less...");
}, function(){
	$('.filter_item ul').each(function(){
		$('li:gt(2)', this).hide();
		if ($(this, 'li').children().length > 3) {
			$(this, ':last').show();
		}
	});
});


работает но один раз и только на том элементе на котором кликнули :blink:


Часовой пояс GMT +3, время: 01:23.