I am trying to hide / show a subset of rows when I click a row with a specific id.
Thanks to a lot of searching on the Internet and many attempts, I got the code below.
The only problem is that this code for some reason only hides / shows the very first set of lines.
<!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>
Does anyone have a suggestion and / or possible rewriting of code?
---------- Update - final decision -----------
In the end, I got the solution below, based on Brandon's input, as I wanted to do more nesting with the same behavior, sort of like a resettable tree view. Unfortunately, this meant that I had to add an additional attribute to track the state, but now I can live with it until I find another way (for example, check the visibility of the next line).
$(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); } }); }
jquery html-table row expand
Christian mikkelsen
source share