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

如何使用javascript获取表格中单元格的位置?,javascript,Javascript,我的意思是,单元格左侧有多少列,顶部有多少行。我需要的正是两个功能: function FindColPos(element) { /* find column position */ return colPos; } function FindRowPos(element) { /* find row position */ return rowPos; } 函数必须以这种方式编写,我不能像ID那样向文档中添加其他内容,因为我只能访问文档的开头,在那里插入javascript函数。(所有这

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

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

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

函数必须以这种方式编写,我不能像ID那样向文档中添加其他内容,因为我只能访问文档的开头,在那里插入javascript函数。(所有这些都是C#中另一个项目的一部分)。传递给函数的元素将是一行中的一个单元格(一个
元素),但是如果我可以传递
中的任何元素,并且函数可以识别父
,那就更好了。我在javascript方面还不够高级,无法自己解决这个问题。我甚至不知道这是否可能。希望您能提供帮助。

您应该能够在同一级别上迭代以前的节点,并计算相应的节点,直到用完为止

差不多

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之前关闭,现在已修复。

我不知道是否每个浏览器都支持它,但存在具有属性的对象和具有属性的对象

因此,这将是:

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

function FindRowPos(element)
{
    return element.parentNode.rowIndex;
}
假设
元素
td
对象

但我还没有找到支持它的浏览器的信息。最新的野生动物园有;)

更新:

IE 5.5、FF 1.0、Safari 1.0和Opera 7.0甚至支持这些属性。所以我想说,使用它们非常省钱,而且比迭代前面的所有元素要快得多


您可能还对
sectionRowIndex
感兴趣,它给出了与elments
tbody
thead
tfoot
相关的索引
rowIndex
返回相对于整个表的索引。

prev.nodeName==“TR”
可能比使用正则表达式更快。@Felix我不会争辩这一点,如果性能是一个问题,那么这是一个很好的考虑因素。我通常希望节点名是大写的,但我从来没有看过规范来确认这是否总是正确的,所以我默认使用防御解决方案。在ie8中似乎工作得很好,但如果这很重要的话,它只对合并的单元计数一次。@lincolnk:合并的单元是什么意思<代码>行span?