我希望能够按行和列索引选择表格单元格,同时补偿rowspan
和colspan
。例如,在下表中,
我希望将(1,2)红色,(2,3)绿色和(3,3)蓝色着色,以产生:
我尝试了“按行号和列号选择表格中的任意单元格”这个问题的答案,但这产生了:
这是 jsFiddle:http://jsfiddle.net/acheong87/27HuN/
我明白发生了什么,我什至发现了另一个问题,“Table cellIndex and rowIndex with colspan/rowspan”,答案是作为插件提供的,但似乎没有更简单的方法!毕竟,实际结果的着色似乎可以理解,但不直观,而预期结果的着色似乎更直观,更容易掌握。
谁能想到一个聪明而简单的方法来实现这个?
更新
这是我(糟糕的)尝试的新 jsFiddle,以防它可能激发其他人的新想法。基本上,如果我们假设 row 和 col 标题没有跨越(当然,这不是一个有效的假设),那么我们可以使用偏移量来“定位”正确的单元格:
function getCell(table, r, c)
{
var rowHead = $(table.rows[r].cells[0]);
var colHead = $(table.rows[0].cells[c]);
var y = rowHead.offset().top + rowHead.outerHeight(true)/2;
var x = colHead.offset().left + colHead.outerWidth(true)/2;
return $(document.elementFromPoint(x, y));
}
虽然演示似乎有效,但存在许多问题:
- 不能假设没有跨越行和列标题。
- 如果行或列的中点不在视口之外,则不起作用;
elementFromPoint
似乎取决于视口。 - 滚动、边距等起作用时不能可靠地工作;一般脆弱;宁愿不依赖坐标数学。