我试图在单击具有特定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);
}
});
}
$(this).data("value")
和$(this).data("value", "expanded")
。另外,链式调用以避免扫描 DOM 2 次:$(this).nextUntil(parentClass).data("value","collapsed").toggle(false);
- Brandon