У меня есть такая разметка (классы только для объяснения):
<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() мне необходимо привязать все события к этому элементу и указать точное селектор для каждого, как я понимаю. Так, например, чтобы связать отдельные функции с двумя кнопками рядом друг с другом, я должен был бы каждый раз указывать селектор, & agrave; л
$("#root").on("change", "li > section button.b1", function() {
b1Function();
}).on("change", "li > section button.b2", function() {
b2Function();
});
Это точно? В этом случае имеет смысл отказаться от .on() и привязать мои события к моменту добавления нового элемента на страницу? Общее количество элементов, вероятно, будет насчитывать не больше десятков, если это имеет значение в ответе.