按位置我的意思是,单元格左侧有多少列,顶部有多少行。我需要的是两个功能:
function FindColPos(element)
{
/* find column position */
return colPos;
}
function FindRowPos(element)
{
/* find row position */
return rowPos;
}
函数必须以这种方式编写,我不能像ID那样在我的文档中添加其他东西,因为我只能访问文档的头部,我将插入javascript函数。 (所有这些都是C#中另一个项目的一部分)。传递给函数的元素将是一行中的单元格(<TD>
元素)但是如果我可以传递<TD>
内的任何元素并且该函数可以识别父{{1} }}。我在javascript上不够先进,无法自己搞清楚。我实际上甚至不知道它是否可能。希望你能帮忙。
答案 0 :(得分:4)
我不知道每个浏览器是否支持它,但是存在TableCell
个对象,这些对象具有cellIndex属性和TableRow
个具有{的对象{3}}属性。
所以它会是:
function FindColPos(element)
{
return element.cellIndex;
}
function FindRowPos(element)
{
return element.parentNode.rowIndex;
}
假设element
是td
对象。
但我还没有找到哪个浏览器支持它的信息。最新的Safari确实如此;)
<强>更新强>
IE 5.5,FF 1.0,Safari 1.0和Opera 7.0甚至支持这些属性。因此,我认为使用它们非常方便,并且比迭代所有前面的元素要快得多。
您可能还对sectionRowIndex
感兴趣,tbody
会提供相对于元素thead
,tfoot
或rowIndex
的索引。 {{1}}返回相对于整个表的索引。
答案 1 :(得分:2)
您应该能够在同一级别上回溯先前的节点,并计算适当的节点,直到用完为止。
类似
function FindColPos(element) {
/* find column position */
var colPos = 0;
var prev = element.previousSibling;
while (prev) {
if (prev.nodeType == 1 && prev.nodeName.match(/t[dh]/i)) {
colPos++;
}
prev = prev.previousSibling;
}
return colPos;
}
function FindRowPos(element) {
/* find row position */
var rowPos = 0;
var prev = element.parentNode.previousSibling;
while (prev) {
if (prev.nodeType == 1 && prev.nodeName.match(/tr/i)) {
rowPos++;
}
prev = prev.previousSibling;
}
return rowPos;
}
如果相同类型的所有元素都被视为从零开始的数组,则 colPos
和rowPos
将成为索引。
编辑:为了清楚起见,假设两个单元格都将单元格作为元素。
edit2:此方法将合并的单元格统计为一个。如果需要将合并的单元格统计为块而不是整体,则可以在元素上查找colspan
属性。
edit3:FindRowPos
被1关闭,现在已修复。