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