使用表主类在 tr 之间获取表中的所有 tr 并推入数组

Posted

技术标签:

【中文标题】使用表主类在 tr 之间获取表中的所有 tr 并推入数组【英文标题】:Get all tr in table between tr with table-primary class and push in array 【发布时间】:2021-09-14 07:53:27 【问题描述】:

点击按钮#create-arrays 我需要创建多个数组。每个数组将包含存在于两个 tr (前一个和下一个)之间的一组 tr (不是 .table-primary),具有类表 primary。这组 tr 将被称为上下文。使用 jquery,我如何识别任何此类上下文并将其放入数组中?感谢所有愿意提供帮助的人。

html 部分(用于测试):

<!doctype html>
<html lang="en">

  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
  </head>
  <body>
    <table class="table table-sm">
      <thead>
        
      </thead>
      <tbody>
        <tr class="table-primary">
          <td colspan="2">Group 1</td>
        </tr>
        <tr>
          <td>Name: Jonh</td>
          <td>Surname: Doe</td>
        </tr>
        <tr>
          <td>Name: Mark</td>
          <td>Surname: Lon</td>
        </tr>
        <tr class="table-primary">
          <td colspan="2">Group 2</td>
        </tr>
        <tr>
          <td>Name: Will</td>
          <td>Surname: Man</td>
        </tr>
        <tr>
          <td>Name: Ben</td>
          <td>Surname: Harper</td>
        </tr>
        <tr>
          <td>Name: Mitch</td>
          <td>Surname: Collins</td>
        </tr>
        <tr class="table-primary">
          <td colspan="2">Group 3</td>
        </tr>
        <tr>
          <td>Name: Serena</td>
          <td>Surname: Mellin</td>
        </tr>
        <tr class="table-primary">
          <td colspan="2">Group 4</td>
        </tr>
        <tr>
          <td>Name: Nickolas</td>
          <td>Surname: Malinof</td>
        </tr>
        <tr>
          <td>Name: David</td>
          <td>Surname: Benner</td>
        </tr>
        <tr>
          <td>Name: Lenny</td>
          <td>Surname: Doe</td>
        </tr>
        <tr>
          <td>Name: Micheal</td>
          <td>Surname: Pitzford</td>
        </tr>
        <tr>
          <td>Name: Melania</td>
          <td>Surname: Bebant</td>
        </tr>
      </tbody>
    </table>    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
  </body>
</html>

我用来获取 tbody 中所有 tr 的 jquery 脚本。

$('#create-arrays').on('click', function()

    var context = [];
    var a = $('#file_table_available tbody tr');
    console.log(a);
        for (let i = 0; i < a.length; i++) 
            const element = a[i];
        
    )

【问题讨论】:

$('tr:not('.table-primary') 将创建一个 jQuery 对象,其中包含您要定位的元素。如果你需要从那里创建一个数组,你可以从那里使用map(),但是当你已经有 jQuery 对象可以使用时,从 jQuery 对象创建一个 tr 元素的数组似乎是多余的。不过取决于您的用例。 这些数组有什么用?更详细地解释用例会有所帮助 【参考方案1】:

您已经开始循环遍历表中的所有行了。

您可以检查每一行(您的 sn-p 中的element)是否存在table-primary 类。如果该行有此类,您知道您必须创建一个新组。

这是一个普通的 javascript 示例。它输出一组组。每个组包含 1 个或多个属于一起的行。

const rows = document.querySelectorAll("tr");

const groups = [];
let group = null;

for (const row of rows) 
  if (row.classList.contains("table-primary")) 
    group = [];
    groups.push(group);
   else 
    group.push(row);
  


console.log(groups);
<table class="table table-sm">
  <thead>

  </thead>
  <tbody>
    <tr class="table-primary">
      <td colspan="2">Group 1</td>
    </tr>
    <tr>
      <td>Name: Jonh</td>
      <td>Surname: Doe</td>
    </tr>
    <tr>
      <td>Name: Mark</td>
      <td>Surname: Lon</td>
    </tr>
    <tr class="table-primary">
      <td colspan="2">Group 2</td>
    </tr>
    <tr>
      <td>Name: Will</td>
      <td>Surname: Man</td>
    </tr>
    <tr>
      <td>Name: Ben</td>
      <td>Surname: Harper</td>
    </tr>
    <tr>
      <td>Name: Mitch</td>
      <td>Surname: Collins</td>
    </tr>
    <tr class="table-primary">
      <td colspan="2">Group 3</td>
    </tr>
    <tr>
      <td>Name: Serena</td>
      <td>Surname: Mellin</td>
    </tr>
    <tr class="table-primary">
      <td colspan="2">Group 4</td>
    </tr>
    <tr>
      <td>Name: Nickolas</td>
      <td>Surname: Malinof</td>
    </tr>
    <tr>
      <td>Name: David</td>
      <td>Surname: Benner</td>
    </tr>
    <tr>
      <td>Name: Lenny</td>
      <td>Surname: Doe</td>
    </tr>
    <tr>
      <td>Name: Micheal</td>
      <td>Surname: Pitzford</td>
    </tr>
    <tr>
      <td>Name: Melania</td>
      <td>Surname: Bebant</td>
    </tr>
  </tbody>
</table>

【讨论】:

以上是关于使用表主类在 tr 之间获取表中的所有 tr 并推入数组的主要内容,如果未能解决你的问题,请参考以下文章

使用jQuery选择表中两个元素之间的行

jQuery:如何删除表中的 tr 标签?

Thymeleaf 在表中为 <tr> 使用局部变量

表格中最后两行之间的空格

使用选择器获取具有特定背景颜色的所有 tr

在多个表中计算 <tr> 中的 <td>