javascript - Jquery 折叠前一个 tr 并在单击时展开另一个 tr

标签 javascript jquery html

我有一个包含 2 行的表格,点击 tr 下面的第一行数据会展开。单击第二行时,第二行下方的数据会通过关闭第一行数据(折叠)展开。问题是当我单击第一行时,第二行数据仍处于展开状态。同时扩展第一行数据。谁能建议现在如何折叠第二行数据?

下面是代码片段:

$('tr.header').click(function() {
  $(this).nextUntil('tr.header').slideToggle(100, function() {});
  $(this).prevUntil('tr.header').slideUp(100, function() {});
});

HTML:

<table>
  <tr class="header">
    <td colspan="2">Header1</td>
  </tr>
  <tr>
    <td>data</td>
    <td>data</td>
  </tr>
  <tr>
    <td>data</td>
    <td>data</td>
  </tr>
  <tr class="header">
    <td colspan="2">Header2</td>
  </tr>
  <tr>
    <td>date</td>
    <td>data</td>
  </tr>
  <tr>
    <td>data</td>
    <td>data</td>
  </tr>
</table>

最佳答案

你可以做的是为每个展开的 <tr> 添加一个类并使用所述类来定位他们以折叠展开的所有内容,无论它是在您单击的行之前还是之后。

这里有一个演示,它绝不是一个完整的解决方案,但它应该足以让您了解它是如何工作的。

编辑:根据您的要求,我更改了代码以在单击标题时折叠展开的部分。我改变的是:当一个部分被展开时,它的标题会得到一个额外的类,当一个标题被点击时,它的部分会根据它是否有类来展开或折叠。尽管如此,这只是概念证明而非完整的解决方案,如果您正在使用它,请记住这一点。

$('tr.header').click(function() {
  $('.expanded').slideUp(100, function() {});
  if (!$(this).hasClass('expanded-header')) {
    $(this).nextUntil('tr.header').addClass('expanded').slideToggle(100, function() {});
    $('.expanded-header').removeClass('expanded-header');
    $(this).addClass('expanded-header');
  } else {
    $(this).removeClass('expanded-header');
  }
});
.content {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr class="header">
    <td colspan="2">Header1</td>
  </tr>
  <tr class="content">
    <td>data</td>
    <td>data</td>
  </tr>
  <tr class="content">
    <td>data</td>
    <td>data</td>
  </tr>
  <tr class="header">
    <td colspan="2">Header2</td>
  </tr>
  <tr class="content">
    <td>date</td>
    <td>data</td>
  </tr>
  <tr class="content">
    <td>data</td>
    <td>data</td>
  </tr>
</table>

顺便说一句,你在这里尝试 build 的东西叫做 Accordion ,并且有quite some solutions available already (更不用说 bootstrap has one included 了)。我不知道这是否对您有帮助,但也许您不需要重新发明轮子。

关于javascript - Jquery 折叠前一个 tr 并在单击时展开另一个 tr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36225043/

相关文章:

javascript - 如何将远程 json 数据添加到 prop 中?

javascript - 按 T​​AB 键从 javascript 调用 servlet

javascript - 无法设置下拉值

响应式数据表上的 jQuery 事件不起作用

php - jquery切换功能的问题

javascript - 如何在Reactjs中制作组件实例

javascript - 在Javascript中轮询本地值的首选方式?

javascript - HTML 如何判断哪些元素是可见的?

html - 自动高度父 div 中的百分比高度?

html - 三列 float 固定布局