Вы можете сделать что-то вроде этого:
$('.answeropener').click(function() {
$(this).toggleClass("highlightc").next().toggle();
$('.allopener').toggleClass("highlighti", $('.text:hidden').length > 0);
return false;
});
$('.allopener').click(function() {
var any = $('.text:hidden').length > 0;
$('.text').toggle(any).prev().toggleClass('highlightc', any);
$(this).toggleClass("highlighti", any);
return false;
});
Вы можете попробовать здесь , извиняюсь за ужасные, ужасные используемые цвета.
То, что мы делаем, - на click
кнопки «все», которую мы проверяем, каким должно быть действие (если есть любой скрытый, покажите их, если не скрываете их все). При щелчке каждого .answeropener
мы проверяем, остались ли скрытые .text
узлы скрытыми ... таким образом, стиль .allopener
правильный, например. затем расширяется последний ответ, его класс highlighti
удаляется, потому что при щелчке он будет скрывать их все ... так что его состояние теперь правильно отражает это.
Мы можем сократить это, используя перегрузку .toggleClass(class, switch)
, которая позволяет передать логическое значение, чтобы сообщить ему, должен ли класс быть включен или выключен.
Обновление для комментариев , вот версия, которая будет работать для каждого вопроса:
$('.answeropener').click(function() {
var q = $(this).closest('.item');
$(this).toggleClass("highlightc").next().toggle();
q.find('.allopener').toggleClass("highlighti", q.find('.text:hidden').length > 0);
return false;
});
$('.allopener').click(function() {
var q = $(this).closest('.item'), any = q.find('.text:hidden').length > 0;
q.find('.text').toggle(any).prev().toggleClass('highlightc', any);
$(this).toggleClass("highlighti", any);
return false;
});
Вы можете попробовать здесь