Estoy tratando de ocultar/mostrar un subconjunto de filas al hacer clic en una fila con una identificación específica.JQuery alternar filas al hacer clic
A través de una gran cantidad de búsquedas en la web y un montón de intentos obtuve el siguiente código.
El único problema es que este código por algún motivo solo oculta/muestra el primer conjunto de filas.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Test</title>
<script src="http://code.jquery.com/jquery-1.5.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function()
{
$('#rowToClick').click(function()
{
$(this).nextAll('tr').each(function()
{
if ($(this).is('#rowToClick'))
{
return false;
}
$(this).toggle();
});
});
});
</script>
</head>
<body>
<table>
<tr id="rowToClick"><td>ClickMe</td></tr>
<tr id="Tr1"><td>Toggled</td></tr>
<tr id="Tr2"><td>Toggled</td></tr>
<tr id="Tr3"><td>Toggled</td></tr>
<tr id="Tr4"><td>Toggled</td></tr>
<tr id="Tr5"><td>Toggled</td></tr>
<tr id="rowToClick"><td>ClickMe</td></tr>
<tr id="Tr6"><td>Toggled</td></tr>
<tr id="Tr7"><td>Toggled</td></tr>
<tr id="Tr8"><td>Toggled</td></tr>
<tr id="Tr9"><td>Toggled</td></tr>
<tr id="Tr10"><td>Toggled</td></tr>
</table>
</body>
</html>
¿Alguien tiene una sugerencia y/o posible reescritura del código?
actualización ---------- - La solución final -----------
que terminó con la solución a continuación basándose en la entrada de Brandon, ya que quería hacer más anidación con el mismo comportamiento, algo así como una vista de árbol plegable. Desafortunadamente eso significaba que tenía que agregar un atributo adicional para hacer un seguimiento del estado, pero puedo vivir con eso por ahora, hasta que encuentre otra forma (por ejemplo, verificar la visibilidad de la siguiente fila).
$(document).ready(function() {
toggleRows('.module','.namespace');
toggleRows('.namespace','.type');
toggleRows('.type','.member');
});
function toggleRows(parentClass,subClass)
{
$(parentClass).click(function() {
if($(this).attr("value")=="collapsed")
{
$(this).attr("value","expanded");
$(this).nextUntil(parentClass).filter(subClass).toggle(true);
}
else
{
$(this).attr("value","collapsed");
$(this).nextUntil(parentClass).attr("value","collapsed");
$(this).nextUntil(parentClass).toggle(false);
}
});
}
¿Has pensado en usar un complemento como tablesorter? http://blog.pengoworks.com/index.cfm/2008/3/28/Finished-jQuery-Tablesorter-mod-for-Collapsible-Table-Rows – iivel
Utilice .data() en lugar de .attr(). Es más compatible: '$ (this) .data (" value ")' y '$ (this) .data (" value "," expanded ")'. Además, encadene sus llamadas para evitar escanear el DOM 2x: '$ (this) .nextUntil (parentClass) .data (" value "," collapsed "). Toggle (false);' – Brandon