gpt4 book ai didi

jquery - 如何使用 jQuery 找到每个表格单元格的 "visual location"?

转载 作者:技术小花猫 更新时间:2023-10-29 12:53:09 28 4
gpt4 key购买 nike

我有一个包含 ROWSPAN 和 COLSPAN 的 HTML 表格。

如何使用 jQuery 找到每个单元格的“可视位置”?

例如,这是我表格的可视化表示,每个单元格都填充了“视觉位置”算法应返回的内容:
(注意:我只关心 <tbody> 中的单元格,列引用可以是整数,而不是字母字符,我这样做只是为了轻松突出问题)

+--+--+--+--+--+
| |A |B |C |D |
+--+--+--+--+--+
|1 |A1|B1 |D1|
+--+--+--+--+ +
|2 |A2 |C2| |
+--+ +--+ +
|3 | |C3| |
+--+--+--+--+--+
|4 |A4|B4|C4|D4|
+--+--+--+--+--+
|XYZ |
+--+--+--+--+--+

我已经尝试实现第一个,但是单元格 C3 的引用不准确,因为它没有考虑 ROWSPANS。第二个链接也许能够合并到第一个的解决方案中,但我不知道如何。

我希望将其用作一个名为 getCellLocation(cell) 的函数这将返回一个关联数组,该数组返回如下位置:

function getCellLocation(cell)
{
var row_number = parseInt($(cell).parent().prevAll().length) + 1;
var col_number = 1;
$(cell).prevAll('td').each(function() {
col_number += $(this).attr('colspan') ? parseInt($(this).attr('colspan')) : 1;
});

var location = new Array();
location['row'] = row_number;
location['col'] = col_number;
location['index'] = $('td').index(cell) + 1;
return location;
}

$('table td').each(function(i){
var cell = getCellLocation($(this));
$(this).prepend('<span class="ref">R' + cell['row'] + ':C' + cell['col'] + ':D' + cell['index'] + '</span>');
});

这是示例表的 HTML:

<table border="1" cellspacing="0">
<thead>
<tr>
<th></th>
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
</tr>
</thead>
<tbody>
<tr>
<th>1</th>
<td>A1</td>
<td colspan="2">B1</td>
<td rowspan="3">D1</td>
</tr>
<tr>
<th>2</th>
<td rowspan="2" colspan="2">A2</td>
<td>C2</td>
</tr>
<tr>
<th>3</th>
<td>C3</td>
</tr>
<tr>
<th>4</th>
<td>A4</td>
<td>B4</td>
<td>C4</td>
<td>D4</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="5">XYZ</td>
</tr>
</tfoot>
</table>
<style> span { background-color: #ffc; margin-right: .5em;} </style>

最佳答案

这是我的解决方案:

function getCellLocation(cell) {

var cols = cell.closest("tr").children("td").index(cell);
var rows = cell.closest("tbody").children("tr").index(cell.closest("tr"));
var coltemp = cols;
var rowtemp = rows;

cell.prevAll("td").each(function() {
cols += ($(this).attr("colspan")) ? parseInt($(this).attr("colspan")) - 1 : 0;
});

cell.parent("tr").prevAll("tr").each(function() {
//get row index for search cells
var rowindex = cell.closest("tbody").children("tr").index($(this));
// assign the row to a variable for later use
var row = $(this);
row.children("td").each(function() {
// fetch all cells of this row
var colindex = row.children("td").index($(this));
//check if this cell comes before our cell
if (cell.offset().left > $(this).offset().left) {
// check if it has both rowspan and colspan, because the single ones are handled before
var colspn = parseInt($(this).attr("colspan"));
var rowspn = parseInt($(this).attr("rowspan"));
if (colspn && rowspn) {
if(rowindex + rowspn > rows)
cols += colspn;
}
if(rowspn && rowindex + rowspn > rows) cols +=1;
}

});
});

我正在检查同时具有 colspan 和 rowspan 的单元格,因为其余单元格由这段代码的前五行处理。如果单元格同时具有 rowspan 和 colspan,它们应该会影响不在该单元格下方或旁边的其他单元格,因此我需要搜索每个单元格的先前单元格以进行交互。

关于jquery - 如何使用 jQuery 找到每个表格单元格的 "visual location"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10966687/

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