如何使用javascript获取表格中单元格的位置?

时间:2010-08-03 20:44:48

标签: javascript

按位置我的意思是,单元格左侧有多少列,顶部有多少行。我需要的是两个功能:

function FindColPos(element)
{
/* find column position */
return colPos;
}

function FindRowPos(element)
{
/* find row position */
return rowPos;
}

函数必须以这种方式编写,我不能像ID那样在我的文档中添加其他东西,因为我只能访问文档的头部,我将插入javascript函数。 (所有这些都是C#中另一个项目的一部分)。传递给函数的元素将是一行中的单元格(<TD>元素)但是如果我可以传递<TD>内的任何元素并且该函数可以识别父{{1} }}。我在javascript上不够先进,无法自己搞清楚。我实际上甚至不知道它是否可能。希望你能帮忙。

2 个答案:

答案 0 :(得分:4)

我不知道每个浏览器是否支持它,但是存在TableCell个对象,这些对象具有cellIndex属性和TableRow个具有{的对象{3}}属性。

所以它会是:

function FindColPos(element)
{
    return element.cellIndex;
}

function FindRowPos(element)
{
    return element.parentNode.rowIndex;
}

假设elementtd对象。

但我还没有找到哪个浏览器支持它的信息。最新的Safari确实如此;)

<强>更新

IE 5.5,FF 1.0,Safari 1.0和Opera 7.0甚至支持这些属性。因此,我认为使用它们非常方便,并且比迭代所有前面的元素要快得多。

您可能还对sectionRowIndex感兴趣,tbody会提供相对于元素theadtfootrowIndex的索引。 {{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;
}
如果相同类型的所有元素都被视为从零开始的数组,则

colPosrowPos将成为索引。

编辑:为了清楚起见,假设两个单元格都将单元格作为元素。

edit2:此方法将合并的单元格统计为一个。如果需要将合并的单元格统计为块而不是整体,则可以在元素上查找colspan属性。

edit3:FindRowPos被1关闭,现在已修复。