jQueryのアコーディオンを閉じる開きます
-
23-08-2019 - |
質問
私は、私はすべてを拡大し、すべての機能を折りたたむ実装できるjQueryのアコーディオンのプラグインを使用して、ページ上のアコーディオンの数を設定しました。
各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)
;
それだけで2番目のコマンドを打つと最初にそれらをすべて閉じません。任意の提案ですか?
解決
私はあなたが後にしているかを正確にわからないんだけど、これは私の最高の推測です。すべてのアコーディオンのうち、あなたが閉鎖されているすべてのアコーディオンを開くためのボタン「すべてを開く」(つまり、何のセクションが表示されません)します。私はfilter()
を使用してそれを行うだろう。
$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
.filter(":not(:has(.selected))")
.accordion("activate", 0)
;
あなたは後何であったかということですか?
<時間>編集そのフィルタ機能を説明する。
フィルタ機能は、単に一致しないものを削除し、フィルタを介して、あなたの現在の選択を実行します。私は上記のようにやった、あなたが定期的にjQueryのクエリを渡す1、そしてあなたがフィルタリングする機能を定義することができる場所その他:これは、2つの異なる形式があります。関数がfalseを返した場合、その要素が削除されます。
この場合、クエリは(:not
が)(:has
)クラスと子「選択」(.selected
)を持っていないものを削除します。それはアコーディオンは、現在開いているパネルに追加何だので、私はここに.selected
セレクタを使用します。
、その後は大幅にスクリプト全体を減らすことができます。あなたがアコーディオンに変身する各要素について、あなたはそれをクラス「アコード」を与えることを言ってみましょう。
$(".accord:not(:has(.selected))").accordion("activate", 0);
あなたが望むなら、あなたは簡単に将来的にはより多くのアコーディオンを追加することができ、これはそれを処理するので、これは、はるかに読みやすく、保守性です。
フィルタのドキュメントはこちらです: http://docs.jquery.com/Traversing/filter
他のヒント
jQuery('#accordion').accordion({
active:-1,
});
私は同じ問題を持っていたし、[0]ので、通常のナビゲーションを再開できるアイテムにフォーカスを設定しながら崩壊するjQueryの各()関数を活用し、いくつかの短いコードでそれを解決してきました。