Tengo un html como este:
<div id="1">
<p>
Volume = <input type="text" />
<button rel="3.93e-6" class="1" type="button">Check answer</button>
</p>
<div></div>
</div>
y algunos JS como este:
$("button").click(function () {
var buttonNo = $(this).attr('class');
var correct = Number($(this).attr('rel'));
validate (Number($("#"+buttonNo+" input").val()),correct);
$("#"+buttonNo+" div").html(feedback);
});
Lo que realmente me gustaría es que no tuviera que tener la clase = "1" en el botón (sé que las clases numéricas no son válidas, ¡pero esto es un WIP!), Para poder determinar buttonNo según el id del div padre. En la vida real, hay varias secciones con este aspecto.
¿Cómo encuentro la identificación del div que cría el botón?
¿Cuál sería una forma más semántica de almacenar la respuesta en el código del botón? ¡Quiero que esto sea lo más infalible posible para que un no programador pueda copiar y pegar sin romper cosas!
1.
2.
¡Debe haber un gran número de formas! Una podría ser ocultar un elemento que contenga la respuesta, p. Ej.
Y luego tenga un código jQuery similar al anterior para obtener eso:
Tenga en cuenta que si coloca la respuesta en el código del cliente, entonces ellos pueden verla :) La mejor manera de hacerlo es validarla en el lado del servidor, pero para una aplicación con alcance limitado, esto puede no ser un problema.
fuente
$(parent[0]).attr('id')
después de que me gustaran algunos selectores de padres.Prueba esto:
fuente
fuente
Para obtener la identificación del div padre:
Además, puede refactorizar un poco su código:
Ahora no hay necesidad de una clase de botones
explicación
eq (0), significa que seleccionará un elemento del objeto jQuery, en este caso el elemento 0, por lo tanto, el primer elemento. http://docs.jquery.com/Selectors/eq#index
$ (selector) .siblings (siblingsSelector) seleccionará todos los hermanos (elementos con el mismo padre) que coincidan con el siblingsSelector http://docs.jquery.com/Traversing / siblings # expr
$ (selector) .parents (parentSelector) seleccionará todos los padres de los elementos emparejados por el selector que coincidan con el selector padre. http://docs.jquery.com/Traversing/parents#expr
Así: $ (selector) .parents ('div: eq (0)'); coincidirá con el primer div padre de los elementos emparejados por el selector.
Debería echar un vistazo a los documentos de jQuery, particularmente a los selectores y a los recorridos:
fuente
http://jsfiddle.net/qVGwh/6/ Compruebe esto
fuente
Esto se puede hacer fácilmente haciendo:
Adjunta esto a cualquier objeto dentro de una tabla y te devolverá la identificación de esa tabla.
fuente
JQUery tiene un método .parents () para subir el árbol DOM que puede comenzar allí.
Si está interesado en hacer esto de una manera más semántica, no creo que usar el atributo REL en un botón sea la mejor manera de definir semánticamente "esta es la respuesta" en su código. Recomendaría algo en estas líneas:
y
No estoy muy seguro de cómo están funcionando su validación y comentarios, pero entiende la idea.
fuente
find () y más cercano () parece un poco más lento que:
fuente
$(this).parent().parent().attr("id");
?