selectores name examples ejemplos child avanzados jquery jquery-selectors

name - jQuery parent().("selector")



selectores jquery avanzados (6)

Ahora funciona: http://jsfiddle.net/WAQBj/2/

$(".disabled").hide(); $(".chk").click(function() { $(this).closest(''tr'').find(".disabled").toggle(); });​

Tengo este código HTML:

<tr> <td><input type="checkbox" class="chk" /></td> <td><div class="disabled">text to hide 1</div></td> <td><div class="disabled">text to hide 2</div></td> </tr>

Estoy usando jQuery para ocultar todos los artículos class="disabled" :

$("div.disabled").hide() ;

Quiero mostrar divs deshabilitados cuando hago clic en la casilla de verificación en la misma fila (tr). Lo intenté

$("input.chk").click(function(){ $(this).parent().parent().(".disabled").show(); }) ;

pero no funciona.


Casi. Solo falta la palabra find para indicar .find() .

$("input.chk").click(function(){ $(this).parent().parent().find(".disabled").show(); }) ;

O bien, una versión un poco más corta es .closest() .

$("input.chk").click(function(){ $(this).closest(''tr'').find(".disabled").show(); });

También podría usar .parents() , aunque desearía indicar la :first coincidencia en caso de que haya tablas anidadas.

$("input.chk").click(function(){ $(this).parents(''tr:first'').find(".disabled").show(); });


Es realmente aún más fácil que eso.

$(".disabled").hide(); $(".chk").click(function(){ if($(this).is(":checked")) { $(this).siblings(".disabled").show(); } else { $(this).siblings(".disabled").hide(); } });

Incluso agregué algunas funcionalidades adicionales para que el evento no se disparara solo una vez, sino que cambia según la casilla de verificación esté marcada o no.


Sí, usar find() y closest() es definitivamente el procedimiento correcto. Hay un estilo diferente de escribir lo mismo. El fragmento de código está aquí.

$("input.chk").click(function() { var th = $(this); $(".disabled", th.parent().parent()).show(); });


Utilice .closest() y .find() , así:

$("input.chk").click(function(){ $(this).closest(''tr'').find(".disabled").show(); });

Tu código actual casi funciona, pero necesitas un .find() , así:

$(this).parent().parent().find(".disabled").show();

Si tienes muchas filas como esta, usa .delegate() , así:

$("table").delegate("input.chk", "click", function(){ $(this).closest(''tr'').find(".disabled").show(); });

.delegate() lugar, .delegate() enlaza un controlador a la tabla para que todos los elementos de input.chk . Si está buscando habilitar / deshabilitar, use change y .toggle() además de los anteriores, así:

$("table").delegate("input.chk", "change", function(){ $(this).closest(''tr'').find(".disabled").toggle(this.checked); });

De esta forma, si se revisa, se muestran, si no se ocultan.


Y es aún más fácil:

$(".disabled").hide(); $(".chk").click(function() { $(this).siblings(".disabled").toggle(); });​

:-)