JQuery Accordion Close, затем Open

Я установил несколько аккордеонов на странице, используя плагин 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)
; 

Он поразит только вторую команду и не закроет их все первой. Какие-либо предложения?

Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
11
0
27 358
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я не совсем уверен, что вам нужно, но это мое лучшее предположение. Из всех ваших аккордеонов вы хотите, чтобы кнопка «открыть все» открывала все закрытые аккордеоны (то есть ни один раздел не отображается). Я бы сделал это с помощью 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

Ух ты! Это идеально! Не могли бы вы объяснить мне строку кода .filter? Он отлично работает, но мне бы очень хотелось понять, что он делает, для справки в будущем (я новичок в jquery). Спасибо за вашу помощь! Джон

Jon 22.12.2008 16:25

Отличное объяснение! Это будет большим подспорьем в будущем.

Jon 22.12.2008 18:20

никф - отличное объяснение! Раньше я не видел таких вложенных фильтров. Очень поучительно.

Nathan Long 22.12.2008 23:16

Хорошие ходы, никф, если бы я мог проголосовать за тебя снова, я бы проголосовал. Вы делаете Интернет лучше.

Tyler 28.01.2009 08:19

У меня была такая же проблема, и я решил ее с помощью короткого кода, использующего функцию JQuery each () для свертывания при установке фокуса на элемент [0], чтобы можно было возобновить нормальную навигацию.

http://spstring.jeffthink.com/?p=49

jQuery('#accordion').accordion({        
    active:-1,
});

Другие вопросы по теме