Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.05.2010, 14:24
Аспирант
Отправить личное сообщение для Viper Посмотреть профиль Найти все сообщения от Viper
 
Регистрация: 27.09.2008
Сообщений: 88

Списки и :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-ем списках

Что странно при использовании .nth-child(n) скрывается нужный в всех списках.
Ответить с цитированием
  #2 (permalink)  
Старый 17.05.2010, 14:35
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,566

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

индекс - с нуля, ну сам знаешь.
Ответить с цитированием
  #3 (permalink)  
Старый 17.05.2010, 14:49
Аспирант
Отправить личное сообщение для Viper Посмотреть профиль Найти все сообщения от Viper
 
Регистрация: 27.09.2008
Сообщений: 88

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

индекс - с нуля, ну сам знаешь.
да. спасибо. что-то я наперемудрил с кодом
Ответить с цитированием
  #4 (permalink)  
Старый 17.05.2010, 16:36
Аспирант
Отправить личное сообщение для Viper Посмотреть профиль Найти все сообщения от Viper
 
Регистрация: 27.09.2008
Сообщений: 88

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

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 в котором кликнули на ссылку, а не всех сразу?
Ответить с цитированием
  #5 (permalink)  
Старый 17.05.2010, 17:56
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

$(this).closest('li').siblings().show()
Ответить с цитированием
  #6 (permalink)  
Старый 18.05.2010, 10:06
Аспирант
Отправить личное сообщение для Viper Посмотреть профиль Найти все сообщения от Viper
 
Регистрация: 27.09.2008
Сообщений: 88

Сообщение от e1f Посмотреть сообщение
$(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...");
});


вроде бы получаем же родительский элемент списка?
да и ссылка тоже скрывается(он же последний элемент списка)
Ответить с цитированием
  #7 (permalink)  
Старый 18.05.2010, 10:25
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,566

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

неверно.

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

работает что ли так?
Ответить с цитированием
  #8 (permalink)  
Старый 18.05.2010, 11:22
Аспирант
Отправить личное сообщение для Viper Посмотреть профиль Найти все сообщения от Viper
 
Регистрация: 27.09.2008
Сообщений: 88

Сообщение от micscr Посмотреть сообщение
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();
		}
	});
});


работает но один раз и только на том элементе на котором кликнули
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические формы. ака Выпадающие списки :) sochinec Общие вопросы Javascript 5 18.04.2012 17:19
взаимосвязанные выпадающие списки xDMK Серверные языки и технологии 37 11.11.2010 16:12
Выпадающие списки - динамика Страдающий AJAX и COMET 7 11.09.2009 18:25
помогите задать селектор! mkrylov jQuery 2 28.06.2009 20:34
Списки в ИЕ gaolong (X)HTML/CSS 2 12.03.2009 18:31