gpt4 book ai didi

jquery - 查找标题为子 TH 的表行的所有 TH

转载 作者:行者123 更新时间:2023-11-28 02:25:59 27 4
gpt4 key购买 nike

我有一个表,它有一个表头,它有如下子表头:

table, th, td {
border: 1px solid black;
}
<table>
<thead>
<tr>
<th rowspan="2">Fisrt Name</th>
<th rowspan="2">Last Name</th>
<th colspan="4">Day 1</th>
<th colspan="4">Day 2</th>
</tr>

<tr>
<th session-id="101">Session 1</th>
<th session-id="102">Session 2</th>
<th session-id="103">Session 3</th>
<th session-id="104">Session 4</th>

<th session-id="105">Session 1</th>
<th session-id="106">Session 2</th>
<th session-id="107">Session 3</th>
<th session-id="108">Session 4</th>
</tr>
</thead>

<tbody>
<tr>
<td student-id="110">Foo</td>
<td>Bar</td>

<td>Present</td>
<td>Absent</td>
<td>Present</td>
<td>Present</td>
<td>Absent</td>
<td>Present</td>
<td>Present</td>
<td>Present</td>
</tr>
</tbody>
</table>

我想获取每个学生的出勤数据。我使用此 jQuery 代码遍历表行的所有列。问题是最后一些列没有被考虑。

 $('#attendanceTable tbody > tr')
.each(function(i, row) {
var studentId = '';
var list = [];

$(row)
.find('td')
.each(function(j, column) {
if (j === 0) {
studentId = $(column).attr('student-id');
}
else
{
// Each session tds has a session id
var $th = $(column).closest('table').find('th').eq($(column).index());
var sessionId = $th.attr('session-id');

if (sessionId){
list.push(sessionId);
}
}
});
// do sth with list
list = [];
});

每行有 10 列,但是当按 $(row).find('td').each(function(j, column) 迭代时,它会迭代此列 [First name, Last Name, Day 1, Day 2, Session1-to-session4, SESSION1-to-SESSION2] 问题在这里提出。

我认为下面一行导致了问题。

var $th = $(column).closest('table').find('th').eq($(column).index());

我该如何解决这个问题?

最佳答案

rowspan 属性打乱了计算。您也没有考虑标题单元格分布在两行中的事实。您可以像这样重构代码,更重要的是,只需从 .index() 中减去 2 即可找到匹配的 header :

var $table = $("#attendanceTable");
var $headers = $table.find("thead > tr:nth-child(2) th");
$table.find("tbody > tr").each(function() {
var studentId = $(this).find("td:nth-child(1)").attr("student-id");
var list = [];
/* td:nth-child(n+3) means third cell and onwards */
$(this).find("td:nth-child(n+3)").each(function() {
var $th = $headers.eq($(this).index() - 2);
var sessionId = $th.attr("session-id");
list.push(sessionId);
});
console.log(list);
});
table,
th,
td {
border: 1px solid black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<table id="attendanceTable">
<thead>
<tr>
<th rowspan="2">Fisrt Name</th>
<th rowspan="2">Last Name</th>
<th colspan="4">Day 1</th>
<th colspan="4">Day 2</th>
</tr>
<tr>
<th session-id="101">Session 1</th>
<th session-id="102">Session 2</th>
<th session-id="103">Session 3</th>
<th session-id="104">Session 4</th>
<th session-id="105">Session 1</th>
<th session-id="106">Session 2</th>
<th session-id="107">Session 3</th>
<th session-id="108">Session 4</th>
</tr>
</thead>
<tbody>
<tr>
<td student-id="110">Foo</td>
<td>Bar</td>
<td>Present</td>
<td>Absent</td>
<td>Present</td>
<td>Present</td>
<td>Absent</td>
<td>Present</td>
<td>Present</td>
<td>Present</td>
</tr>
</tbody>
</table>

关于jquery - 查找标题为子 TH 的表行的所有 TH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53984925/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com