Всем привет! Есть много меню, пункты которых в простых дивах. У некоторых div добавляется класс "show", а у остальных "hide item-hide". Под каждым меню нужно выводить ссылку "Показать", если есть хоть один "hide item-hide". Т.е. если есть скрытые пункты, то нужно выводить ссылку на "Показать". При клике нужно убирать "item-hide" и выводить скрытые пункты. Ссылка при этом меняется на "Скрыть". При скрытие, нужно пункты у которых остался класс hide(мы убираем только item-hide) нужно прятать и добавлять item-hide. Чтобы наглядно было Код (Text): <div id="menu-1"> {foreach $arr AS $a} <div class="show">1111</div> <div class="hide item-hide">2222</div> <div class="show">3333</div> <div class="hide item-hide">4444</div> <div class="show">5555</div> {/foreach} <a href="#" onclick="showMenu('1');" class="shows">Показать</a> <a href="#" onclick="hideMenu('1');" class="hides">Скрыть</a> </div> При этом нужно учесть то, что если нет ни одного hide, то не выводить вообще ссылки на Показать\Скрыть, так как они будут не нужны, ибо нечего показывать. Меню формирует smarty. Каждое меню имеет свой id, потому как этих меню не мало. Что-то не могу нормально придумать как реализовать задуманное на jQuery. Точнее не могу понять как у каждого меню проверять через js есть ли hide и у нужных меню выводить ссылки. Буду благодарен за помощь!
Как по мне, то описание слегка сумбурное и мешает понять суть задачи. Больше всего непоняток с классами "hide item-hide". Скрываются элементы только с классом "item-hide"? И возможна ли ситуация, когда при загрузке страницы, элемент с классом "hide", но без класса "item-hide", будет отображаться изначально? В общем, если я правильно понял, то имеем следующую картину (в примере, подсветил элементы с классом "hide"): Пробегаемся по каждой группе менюшек и ищем элементы с классом "item-hide". Если таковые найдены, то ссылке-переключателю ".shows", добавляем класс "on" и текст "Показать". (обратите внимание, что нам не нужны две такие кнопки). Если "item-hide" не найдены - добавляем класс "off" и текст "Скрыть" Далее переключение отображения/скрытия элементов. По событию click на ссылке ".shows", проверяем её дополнительный класс: on или off. В зависимости от этого, мы или же показываем элементы "hide item-hide", убирая класс "item-hide" и меняя текст переключателя, или же проводим обратные действия.
Спасибо за ответ. Прошу прощения, что описание такое. Старался расписать подробнее))) Да. ну или hide. Не особо важно в данном случае. Я просто изначально добавлял два. Чтобы item-hide использовать для Включения\Выключения видимости пунктов меню. А hide для того, чтобы определять потом какие пункты изначально имели статус скрытых. нет. если hide то всегда скрыто изначально. я в php генерирую сразу с нужным статусом и показывать hide не может сразу. Ваш пример вроде то, что нужно. Сейчас попробую адаптировать его. Добавлено спустя 35 минут 20 секунд: Большое спасибо! Работает. А можно как-то не показывать shows, если ни одного hide нету? Кстати в IE9 вообще не выводит ссылку shows, а в ie8 при клике не отображает скрытые элементы. Это у меня глюки или реально не работает? Я через ietester смотрю.
Можно. Просто заменить строку: Код (Text): $(this).children('.shows').text('Скрыть').addClass('off'); // на следующую $(this).children('.shows').hide(); Тестируйте локально на установленных браузерах. Работает всё вплоть до IE7.
Спасибо. А то я так сделал)) Код (Text): if($(this).children('.item-hide').length > 0){ if($(this).children('.item-hide').length > 0){ $(this).children('.shows').text('Показать').addClass('on'); } else { $(this).children('.shows').text('Скрыть').addClass('off'); } } Локально и тестирую. Везде работает, а в этих версиях ie нет. Возможно ietester глючный. буду разбираться. Спасибо за помощь!
Не знаю, не пользуюсь. Предпочитаю установить все популярные браузеры и тестировать в них. Кстати, в осле есть переключение режимов. Поставтьте, как минимум IE9 и сможете просматривать страницы, как в IE8 и IE7. Кроме того, осел может блокировать выполнение скриптов и элементов ActiveX, поэтому может не правильно выполняться работа скрипта.
у меня ie10 стандартно установлен, в нем нормально все. в популярных самых оттестировал, то же все замечательно.