Я установил несколько аккордеонов на странице, используя плагин jquery accordion, поэтому я могу реализовать развернуть все и свернуть все функции.
Каждый элемент ID - это отдельный аккордеон, и приведенный ниже код работает, чтобы закрыть их все, независимо от того, какие из них уже открыты:
$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
.accordion("activate", -1)
;
Моя проблема в том, чтобы развернуть все. Когда у меня все они будут расширены с помощью этого кода:
$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
.accordion("activate", 0)
;
Некоторые из них будут сокращаться, а некоторые расширяться в зависимости от того, открыты они ранее или нет.
Моя идея исправить это состояла в том, чтобы свернуть их все, а затем развернуть их все при щелчке по кнопке «Развернуть все». Однако этот код не будет выполняться должным образом:
$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
.accordion("activate", -1)
;
$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
.accordion("activate", 0)
;
Он поразит только вторую команду и не закроет их все первой. Какие-либо предложения?

Я не совсем уверен, что вам нужно, но это мое лучшее предположение. Из всех ваших аккордеонов вы хотите, чтобы кнопка «открыть все» открывала все закрытые аккордеоны (то есть ни один раздел не отображается). Я бы сделал это с помощью filter()
$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
.filter(":not(:has(.selected))")
.accordion("activate", 0)
;
Это то, что вам было нужно?
Отредактируйте, чтобы объяснить эту функцию фильтра:
Функция фильтра просто пропускает ваш текущий выбор через фильтр, удаляя все, что не соответствует. Он имеет две разные формы: одну, в которой вы передаете обычный запрос jQuery, как я сделал выше, и другую, где вы можете определить функцию для фильтрации. Если функция возвращает false, этот элемент удаляется.
В этом случае запрос удаляет все, что (:not) не имеет (:has) дочернего элемента с классом «selected» (.selected). Я использовал здесь селектор .selected, потому что это то, что аккордеон добавляет к открытой в данный момент панели.
Если бы у вас был только один аккордеон или вы дали каждому из ваших аккордеонов какой-то идентификатор, например, имя класса, вы могли бы значительно сократить весь скрипт. Предположим, что каждому элементу, который вы хотите превратить в гармошку, вы присваиваете класс «аккорд».
$(".accord:not(:has(.selected))").accordion("activate", 0);
Это намного удобнее и удобнее в обслуживании, так как вы можете легко добавить больше аккордеонов в будущем, если хотите, и это поможет.
Документация по фильтру находится здесь: http://docs.jquery.com/Traversing/filter
Отличное объяснение! Это будет большим подспорьем в будущем.
никф - отличное объяснение! Раньше я не видел таких вложенных фильтров. Очень поучительно.
Хорошие ходы, никф, если бы я мог проголосовать за тебя снова, я бы проголосовал. Вы делаете Интернет лучше.
У меня была такая же проблема, и я решил ее с помощью короткого кода, использующего функцию JQuery each () для свертывания при установке фокуса на элемент [0], чтобы можно было возобновить нормальную навигацию.
jQuery('#accordion').accordion({
active:-1,
});
Ух ты! Это идеально! Не могли бы вы объяснить мне строку кода .filter? Он отлично работает, но мне бы очень хотелось понять, что он делает, для справки в будущем (я новичок в jquery). Спасибо за вашу помощь! Джон