tengo algunas marcas como esto (las clases son sólo para la explicación):delegación de eventos vs unión directa al añadir elementos complejos a una página
<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>
es decir, anidado listas pueden ordenar. El plugin ordenable es suficiente, sin embargo, ya que cada li (en lo sucesivo, "elemento") mantiene su nivel, aunque las listas internas están conectadas. Los elementos tienen un encabezado siempre visible y una sección visible cuando están en estado expandido, al hacer clic en el encabezado. El usuario puede agregar y eliminar elementos de cualquier nivel a voluntad; agregar un elemento de nivel superior incluirá una lista de nidos vacía dentro de él. Mi pregunta es con respecto a JS inicialización del elemento recién creado: Mientras que compartirán algunas funciones comunes, que puedo cubrir a través de
$("#root").on("click", "li > header", function() {
$(this).parent().toggleClass("collapsed");
});
y
li.collapsed section {
display: none;
}
(pregunta al margen: sería esto una lugar apropiado para usar los detalles/etiquetas HTML5 de resumen? Parece algo dudoso sobre si esos incluso llegarán a la especificación final, y quiero una transición deslizante, por lo que parece que necesitaría JS para eso de todos modos. lanza la pregunta a las masas. Hola, misas.)
Si la lista raíz es el único elemento (relevante) que se garantiza que existe al cargar la página, para que .on() funcione de manera efectiva, debo vincular todos los eventos a ese elemento y deletrear el selector preciso para cada uno, como Yo lo entiendo. Entonces, por ejemplo, para unir funciones separadas a dos botones uno al lado del otro, tendré que deletrear el selector por completo cada vez, & agrave; la
$("#root").on("change", "li > section button.b1", function() {
b1Function();
}).on("change", "li > section button.b2", function() {
b2Function();
});
¿Es eso exacto? Siendo ese el caso, ¿tiene más sentido renunciar a .on() y vincular mis eventos en el momento en que se agrega el nuevo elemento a la página? El número total de elementos probablemente se sumará a docenas como máximo, si eso hace una diferencia en la respuesta.
+1, me gustaría ver una respuesta detallada tal vez describiendo las consideraciones de rendimiento. – jondavidjohn
En mi opinión, cualquier enfoque estaría bien si sabes que el límite superior es docenas como máximo. Pero estoy seguro de que sabes que a veces estas cosas tienen una forma de crecer con el tiempo ... – nnnnnn
¿Habrá docenas de elementos en total o puede haber docenas de un solo tipo de elemento?En su ejemplo 'button.b2', ¿habrá uno de estos o potencialmente docenas? –