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