我在点击具有特定ID的行时试图隐藏/显示行的子集.
<!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>
任何人都有建议和/或可能重写代码?
———-更新 – 最终解决方案———–
我最终根据Brandon的输入得到了下面的解决方案,因为我想用相同的行为做更多的嵌套,有点像可折叠的树视图.
不幸的是,这意味着我必须添加一个额外的属性来跟踪状态,但我现在可以忍受,直到我找到另一种方式(例如检查下一行的可见性).
$(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); } }); }
解决方法
首先,您不能拥有多个具有相同ID的行.而不是将id设置为“rowToClick”,设置css类:
<tr class='rowToClick'><td>click me</td></tr>
接下来,这应该工作:
$(document).ready(function() { $(".rowToClick").click(function() { $(this).nextUntil(".rowToClick").toggle(); }); });