私はこのようなマークアップをいくつか持っています(クラスは説明のためだけです):
<ol id="root" class="sortable">
<li>
<header class="show-after-collapse">Top-Line Info</header>
<section class="hide-after-collapse">
<ol class="sortable-connected">
<li>
<header class="show-after-collapse">Top-Line Info</header>
<section class="hide-after-collapse">
<div>Content A</div>
</section>
</li>
</ol>
</section>
</li>
<li>
<header/>
<section class="hide-after-collapse">
<ol class="sortable-connected">
<li>
<header/>
<section class="hide-after-collapse">
<div>Content B</div>
</section>
</li>
</ol>
</section>
</li>
</ol>
つまり、ネストされた並べ替え可能なリストです。ただし、ソート可能なプラグインで十分です。内部のリストは接続されていますが、各 li (以下、「アイテム」) はそのレベルを維持するためです。アイテムには、常に表示されるヘッダーと、展開された状態のときに表示されるセクションがあり、ヘッダーをクリックすると切り替えられます。ユーザーは、どちらのレベルからでも項目を自由に追加および削除できます。トップレベルのアイテムを追加すると、その中に空のネスト リストが含まれます。私の質問は、新しく作成されたアイテムの JS 初期化に関するものです。それらはいくつかの共通機能を共有しますが、
$("#root").on("click", "li > header", function() {
$(this).parent().toggleClass("collapsed");
});
と
li.collapsed section {
display: none;
}
(補足質問: これは HTML5 の詳細/要約タグを使用するのに適切な場所でしょうか?最終的な仕様にそれが組み込まれるかどうかについては、やや不確かなようです。とにかくそれには JS が必要です.しかし、私は大衆に質問を投げかけます.こんにちは、大衆.)
ルート リストが、ページの読み込み時に存在することが保証されている唯一の (関連する) 要素である場合、.on() が効果的に機能するには、すべてのイベントをその要素にバインドし、それぞれの正確なセレクターを綴る必要があります。それを理解します。したがって、たとえば、別々の機能を隣り合わせの 2 つのボタンに関連付けるには、セレクターを毎回完全にスペルアウトする必要があります。
$("#root").on("change", "li > section button.b1", function() {
b1Function();
}).on("change", "li > section button.b2", function() {
b2Function();
});
それは正確ですか?その場合、新しいアイテムがページに追加されたときに .on() を忘れてイベントをバインドする方が理にかなっていますか? 応答に違いが生じる場合、アイテムの総数はおそらくせいぜい数十になるでしょう。