Jquery 获取td的节点索引

Jquery 获取td的节点索引,jquery,indexing,html-table,Jquery,Indexing,Html Table,如果我有一个像下面这样的身体。。。我知道如果我点击第一个收音机,它会返回1。如果单击表外部的一个,它将返回2。但当我单击嵌套表的第一个td时,它会在两个警报中返回其索引加上“父级的td索引”。如何仅返回嵌套的td索引,该索引应为2?这只是一个动态构建的示例表结构,因此它需要与几乎任何表设计和任何td一起工作 有什么建议吗? 这是我用来在用户单击td时返回索引的代码(我捕获输入、文本区域等的其他索引): 这是样本体: <body> <input type="radio

如果我有一个像下面这样的身体。。。我知道如果我点击第一个收音机,它会返回1。如果单击表外部的一个,它将返回2。但当我单击嵌套表的第一个td时,它会在两个警报中返回其索引加上“父级的td索引”。如何仅返回嵌套的td索引,该索引应为2?这只是一个动态构建的示例表结构,因此它需要与几乎任何表设计和任何td一起工作

有什么建议吗?
这是我用来在用户单击td时返回索引的代码(我捕获输入、文本区域等的其他索引):

这是样本体:

<body>  
    <input type="radio" />
        <table class="parent_table">
            <tr>
                <td>
                    <table class="nested_table">
                        <tr>
                            <td>
                                Sample Text</td>
                            <td>
                                &nbsp;</td>
                        </tr>
                    </table>
                </td>
                <td>
                    &nbsp;</td>
            </tr>
        </table>
       <input type="radio" />
    </body>

示例文本

这就是罪魁祸首,它调用所有
s

替换为:

var nodeIndex = $(this).index();

表已经在
td
上具有方便的属性
cellIndex
,在
tr
上具有方便的属性
rowIndex
。这意味着您不需要使用jQuery

相反,尝试类似的方法(无论如何,这更有效):


除了效率更高之外,它还避免了让jQuery陷入混乱。当您在代码中单击嵌套的TD时,实际上您正在单击父表的TD以及嵌套的TD,因此您会收到两个警报。在这里,你只能得到一个。

解决了。我只是将td放入一个全局单击中,然后能够在一个事件中记录节点名和索引,从而消除了双重警报

jQuery('td').live('click', function (event) {

    if (event.target.nodeName.toLowerCase() == "td") {
        var nodeIndex = $("td").index(this);
        var nodeName = $(this).get(0).nodeName
        alert(nodeName + "," + nodeIndex); 
    }

});

@对不起,我可能不太清楚。第二次警报还在冒泡。我需要抑制点击以拾取下面的td。我正在查看并尝试e.stopImmediatePropagation();如果我理解正确,您希望能够单击任何
,无论其深度如何,并使用其索引生成警报。这是正确的吗?这不是cellindex,而是页面中td的层次结构,因此如果表/页面中有10个td,我单击第8个,它将返回8。但是如果该表位于另一个表中,它会选择单元格8,然后选择嵌套表的父单元格。您仍然可以使用我的代码。只需替换
警报
行,并在变量
t
中找到单元格的索引。由于事件处理程序只在一个元素上注册,并一直运行到最近的表单元格,因此每次单击此处仍将仅收到一个警报。
var nodeIndex = $(this).index();
// set ID "parent_table" on the parent table, then...
document.getElementById('parent_table').onclick = function(e) {
    e = e || window.event;
    var t = e.srcElement || e.target;
    while( t != this && (!t.tagName || t.tagName != "TD")) t = t.parentNode;
    if( t.tagName == "TD") {
        alert("You clicked on cell number "+t.cellIndex+" in row number "+t.parentNode.rowIndex);
    }
}
jQuery('td').live('click', function (event) {

    if (event.target.nodeName.toLowerCase() == "td") {
        var nodeIndex = $("td").index(this);
        var nodeName = $(this).get(0).nodeName
        alert(nodeName + "," + nodeIndex); 
    }

});