javascript - JQuery 中的 nextUntil 切换条件

标签 javascript jquery

我正在使用 nextUntil 方法来切换我的表行值。除非在任何级别的最后一个链接中,否则它工作正常。例如(请参阅表格),当我单击级别 1.2.2(第 3 类)时,它隐藏了所有底部行,因为它正在寻找下面的第 3 级是正确的。我相信我需要添加一个条件来实现这一点。但不知道如何添加条件。

我希望当任何级别低于(小于)点击级别时,它将停止切换。另外,有没有其他方法可以实现这些,因为这是一个缓慢的过程。

代码如下:

<table id=test>
  <tr class=1><td>Level 1</td></tr>
  <tr class=2><td>Level 1.1</td></tr>
  <tr class=3><td>Level 1.1.1</td></tr>
  <tr class=3><td>Level 1.1.2</td></tr>
  <tr class=2><td>Level 1.2</td></tr>
  <tr class=3><td>Level 1.2.1</td></tr>
  <tr class=3><td>Level 1.2.2</td></tr>
  <tr class=4><td>Level 1.2.2.1</td></tr>
  <tr class=4><td>Level 1.2.2.1</td></tr>
  <tr class=1><td>Level 2</td></tr>
  <tr class=2><td>Level 2.1</td></tr>
  <tr class=3><td>Level 2.1.1</td></tr>
  <tr class=3><td>Level 2.1.2</td></tr>
</table>

$(document).ready(function () {
    $('tr.3').click(function () {
        $(this).nextUntil('tr.3').slideToggle();
    });
});

提前致谢!

最佳答案

由于您无法更改 HTML 结构,因此有一个替代方案:

$('tr').click(function(event) {
  event.stopPropagation();
  var currentLevel = parseInt($(this).attr('class')),
    state = $(this).hasClass('hiding'),
    nextEl = $(this).next(),
    nextLevel = parseInt(nextEl.attr('class'));
  while (currentLevel < nextLevel) {
    nextEl.toggle(state);
    nextEl = nextEl.next();
    nextLevel = parseInt(nextEl.attr('class'));
  }
  $(this).toggleClass('hiding');
});
tr[class^="2"] td {
  padding-left: 20px;
}
tr[class^="3"] td {
  padding-left: 40px;
}
tr[class^="4"] td {
  padding-left: 60px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="test">
  <tr class="1">
    <td>Level 1</td>
  </tr>
  <tr class="2">
    <td>Level 1.1</td>
  </tr>
  <tr class="3">
    <td>Level 1.1.1</td>
  </tr>
  <tr class="3">
    <td>Level 1.1.2</td>
  </tr>
  <tr class="2">
    <td>Level 1.2</td>
  </tr>
  <tr class="3">
    <td>Level 1.2.1</td>
  </tr>
  <tr class="3">
    <td>Level 1.2.2</td>
  </tr>
  <tr class="4">
    <td>Level 1.2.2.1</td>
  </tr>
  <tr class="4">
    <td>Level 1.2.2.1</td>
  </tr>
  <tr class="1">
    <td>Level 2</td>
  </tr>
  <tr class="2">
    <td>Level 2.1</td>
  </tr>
  <tr class="3">
    <td>Level 2.1.1</td>
  </tr>
  <tr class="3">
    <td>Level 2.1.2</td>
  </tr>
</table>

类似于 Thor84no 的回答,但更简单,IMO。

关于javascript - JQuery 中的 nextUntil 切换条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38746844/

相关文章:

Javascript 在循环内循环以获取 JSON

javascript - jQuery:防止回车键

javascript - 在数组中查找选择器

c# - 如何在C#中通过jquery赋值时获取文本框的值

javascript - 使用 ajax 调用提交表单后 Bootstrap Modal 未关闭?

javascript - PhantomJS 鼠标右键单击不适用于 selenium webriverJS

javascript - 为 Materialise Clockpicker 设置时间格式 'HH:MM:SS '

javascript - jQuery:当文本输入的值以任何方式改变时如何创建函数

javascript - 更改选择框的内容其他

youtube - jQuery-遍历YouTube URL并添加选项