【问题标题】:Jquery loop table from n to n row从n到n行的jquery循环表
【发布时间】:2017-11-15 19:58:25
【问题描述】:

我有一张如下表:

<table>
  <tr class='group'>
    <td>Group 1 </td>
  </tr>
  <tr>
    <td> Group 1 item 1</td>
  </tr>
  <tr>
    <td> Group 1 item 2</td>
  </tr>
  <tr>
    <td> Group 1 item 3</td>
  </tr>
  <tr class='group'>
    <td> group 2</td>
  </tr>
  <tr>
    <td> group 2 item 1</td>
  </tr>
  <tr class='group'>
    <td> group 3</td>
  </tr>
  <tr class='group'>
    <td> group 4</td>
  </tr>
  <tr class='group'>
    <td> group 5</td>
  </tr>
  <tr>
    <td> group 5 item 1</td>
  </tr>
  <tr>
    <td> group 5 item 2</td>
  </tr>
</table>

每当我点击任何一行时,我都会为每一行添加一个类(例如选择)。如果我单击具有名为 group 的类的任何行,那么我想向该组中的所有其他行(如果有)添加/删除一个类

例如如果我单击具有名为 group 的类的第一行,那么我应该在第 2,3 和 4 行添加另一个类,它们属于第 1 行(第 1 组)。

从当前行开始循环,直到再次找到组类(例如第 5 行)

我可以从第 n 行循环到第 n 行吗?

【问题讨论】:

  • 你的 jQuery 在哪里?也请分享一下
  • 这个内容似乎你想为子元素做一些事情,你最接近的tr 没有一个组表现得像一个孩子。如果这样,那么你必须使用另一个元素类型,即列表,导航栏等
  • 我不明白您为什么要将分组列表放在表格中?对我来说听起来更像是一个列表结构。

标签: jquery html html-table


【解决方案1】:

您可以使用nextUntil() 方法选择下一个元素,直到到达下一个tr.group

看这里>nextUntil()

您还需要获取groupIndex,以便您可以将相应的类添加到选定的tr

当然,在单击其他元素时添加/删除选择和 group1、2、3、4、5 类。我添加了一些颜色(您可以在 css 中看到它们)作为示例目的

$("tr").click(function() {
  var groupIndex = $(this).closest('table').find('.group').index(this) + 1
  $(".selection").removeClass("selection")

  $(this).addClass("selection") //for example
  if ($(this).hasClass("group")) {
    $(this).siblings().not(".group").removeClass()
    $(this).nextUntil(".group").addClass("group" + groupIndex + "")
  }
});
.group1 {
  color: red;
}

.group2 {
  color: blue;
}

.group5 {
  color: yellow;
}

.selection {
  color: green
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr class='group'>
    <td>Group 1 </td>
  </tr>
  <tr>
    <td> Group 1 item 1</td>
  </tr>
  <tr>
    <td> Group 1 item 2</td>
  </tr>
  <tr>
    <td> Group 1 item 3</td>
  </tr>
  <tr class='group'>
    <td> group 2</td>
  </tr>
  <tr>
    <td> group 2 item 1</td>
  </tr>
  <tr class='group'>
    <td> group 3</td>
  </tr>
  <tr class='group'>
    <td> group 4</td>
  </tr>
  <tr class='group'>
    <td> group 5</td>
  </tr>
  <tr>
    <td> group 5 item 1</td>
  </tr>
  <tr>
    <td> group 5 item 2</td>
  </tr>
</table>

【讨论】:

    【解决方案2】:

    使用JQuery的nextUntil()函数改变子组元素的类别。

    $(".group").on("click",function(e){
    	
      $(this).siblings(".group").removeClass("selected-header")
      $(this).addClass("selected-header")
    
      $(this).siblings().not(".group").removeClass("selected")
      $(this).nextUntil(".group").addClass("selected")
    })
    .selected-header{
      color : green
    }
    
    .selected{
      color : blue
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <table>
    <tr class='group'> <td>Group 1 </td> </tr>
    <tr> <td> Group 1 item 1</td> </tr>
    <tr> <td> Group 1 item 2</td> </tr>
    <tr> <td> Group 1 item 3</td> </tr>
    <tr class='group'> <td> group 2</td> </tr>
    <tr> <td> group 2 item 1</td> </tr>
    <tr class='group'> <td> group 3</td> </tr>
    <tr class='group'> <td> group 4</td> </tr>
    <tr class='group'> <td> group 5</td> </tr>
    <tr> <td> group 5 item 1</td> </tr>
    <tr> <td> group 5 item 2</td> </tr>
    </table>

    【讨论】:

    • 这按我的需要工作。不幸的是,上述解决方案也有效,所以我选择了它。感谢您的快速解决方案
    猜你喜欢
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多