11

jqueryアコーディオンプラグインを使用してページに多数のアコーディオンを設定したので、すべてを展開してすべての機能を折りたたむことができます。

各ID要素は独自のアコーディオンであり、以下のコードは、どの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番目のコマンドにヒットするだけで、最初にすべてを閉じることはありません。助言がありますか?

4

3 に答える 3

33

あなたが何を求めているのか正確にはわかりませんが、これが私の最善の推測です。すべてのアコーディオンのうち、「すべて開く」ボタンで、閉じている (つまり、セクションが表示されていない) すべてのアコーディオンを開く必要があります。私はそれを使用してそれを行いますfilter()

$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
    .filter(":not(:has(.selected))")
    .accordion("activate", 0)
;

それはあなたが求めていたものですか?


そのフィルター機能を説明するために編集します。

フィルター機能は、フィルターを介して現在の選択を実行し、一致しないものをすべて削除します。これには 2 つの異なる形式があります。1 つは上記のように通常の jQuery クエリを渡す形式で、もう 1 つはフィルター処理する関数を定義できる形式です。関数が false を返す場合、その要素は削除されます。

この場合、クエリは、「選択された」クラス ( ) を持つ子( )を持たないもの ( ) をすべて削除し:notます。ここでセレクターを使用したのは、アコーディオンが現在開いているパネルにセレクターを追加するためです。:has.selected.selected

アコーディオンが 1 つしかない場合、または各アコーディオンに何らかの識別子 (クラス名など) を付けた場合、スクリプト全体を大幅に削減できます。アコーディオンにしたい要素ごとに、クラス「accord」を与えるとしましょう。

$(".accord:not(:has(.selected))").accordion("activate", 0);

これは、必要に応じて将来アコーディオンを簡単に追加でき、これで処理できるため、はるかに読みやすく、保守しやすくなっています。

フィルターのドキュメントはこちら: http://docs.jquery.com/Traversing/filter

于 2008-12-20T03:03:11.683 に答える
2
jQuery('#accordion').accordion({        
    active:-1,
});
于 2010-10-22T20:40:05.797 に答える
0

私は同じ問題を抱えていて、JQuery の each() 関数を利用して折りたたむ短いコードで解決し、アイテム [0] にフォーカスを設定して、通常のナビゲーションを再開できるようにしました。

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

于 2009-03-09T05:37:52.007 に答える