seleccionar elemento con selectores en jQuery
Frecuentes
Visto 442 veces
1
quiero seleccionar un elemento con jQuery.
<ul>
<li><label><input type="checkbox" class="checkbox">checkbox1</label></li>
<ul class="list">
<li>lorem</li>
<li>lorem</li>
<li>lorem</li>
</ul>
<li><label><input type="checkbox" class="checkbox">checkbox2</label></li>
<ul class="list">
<li>lorem</li>
<li>lorem</li>
<li><lorem/li>
</ul>
</ul>
Quiero ocultar y mostrar la lista que está directamente debajo de la casilla de verificación con 1 función jQuery.
$(".list").hide();
$(".checkbox").click(function() {
if ($(".checkbox").is(":checked"))
{
$("????").show('slow');
}
else
{
$("????").hide('slow');
}
});
El ???? necesita ser un selector que (solo) seleccione la lista debajo de la casilla de verificación.
4 Respuestas
6
En primer lugar, su HTML no es válido, ya que no puede tener elementos entre el li
en un parche de ul
. Cambia tu HTML a esto:
<ul>
<li>
<label><input type="checkbox" class="checkbox">checkbox1</label>
<ul class="list">
<li>lorem</li>
<li>lorem</li>
<li>lorem</li>
</ul>
</li>
<li>
<label><input type="checkbox" class="checkbox">checkbox2</label>
<ul class="list">
<li>lorem</li>
<li>lorem</li>
<li><lorem</li>
</ul>
</li>
</ul>
Entonces puedes usar el padre más cercano li
como un contexto para encontrar la relación ul
:
$(".list").hide();
$(".checkbox").click(function() {
var $parentLi = $(this).closest("li");
if ($(this).is(":checked")) {
$("ul", $parentLi).show('slow');
}
else {
$("ul", $parentLi).hide('slow');
}
});
contestado el 22 de mayo de 12 a las 14:05
2
Respuesta rápida:
$(".checkbox").click(function() {
if ($(".checkbox").is(":checked"))
{
$(this).next('ul').show('slow');
}
else
{
$(this).next('ul').hide('slow');
}
});
Sin embargo, como se señaló, su HTML no es válido, el niño <ul>
s debe estar dentro <li>
s mismos.
Además, dependiendo de la visibilidad/estado inicial de las casillas de verificación, puede acortar el código usando $(this).next('ul').toggle('slow');
en lugar de marcar la casilla de verificación de estado marcado.
contestado el 22 de mayo de 12 a las 14:05
1
http://jsfiddle.net/Y7WDJ/ una versión simple de lo que quieres. Selecciona el siguiente .list
elemento y lo alterna cuando se hace clic en la casilla de verificación.
contestado el 22 de mayo de 12 a las 14:05
0
Puede atravesar su estructura bastante fácilmente con
$(this).parents('li').children('.list').show('slow');
Puede haber una forma más sucinta de hacerlo si lee los documentos de jquery sobre selectores y recorridos
contestado el 22 de mayo de 12 a las 14:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas jquery list jquery-selectors checkbox or haz tu propia pregunta.