如何判断在表中单击了哪个行号?

IT技术 javascript jquery html html-table dom-events
2021-02-17 05:49:36

我有一张如下表:

<table>
   <tr>
      <td>1</td><td>1</td><td>1</td>
   </tr>
   <tr>
      <td>2</td><td>2</td><td>2</td>
   </tr>
   <tr>
      <td>3</td><td>3</td><td>3</td>
   </tr>
</table>

当用户单击表格时,如何获取该行(tr元素)的索引

例如,当我单击第一个tr1在上表中s)时,它应该将其捡起并返回1

6个回答

这将使您获得单击行的索引,从一开始:

$('#thetable').find('tr').click( function(){
alert('You clicked row '+ ($(this).index()+1) );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="thetable">
   <tr>
      <td>1</td><td>1</td><td>1</td>
   </tr>
   <tr>
      <td>2</td><td>2</td><td>2</td>
   </tr>
   <tr>
      <td>3</td><td>3</td><td>3</td>
   </tr>
</table>

如果要返回存储在每行第一个单元格中的数字:

$('#thetable').find('tr').click( function(){
  var row = $(this).find('td:first').text();
  alert('You clicked ' + row);
});
@CashCow:旧答案,旧 jQuery 等。首先,您on现在应该使用$('#thetable tr').on('click', function () {...})也许部分或全部表是动态加载的,在这种情况下,您可以尝试绑定到 DOM 准备就绪时您知道存在的元素,例如document: $(document).on('click', '#thetable tr', function () {...})
2021-04-29 05:49:36
这些都不适合我。点表没反应,没进入功能。
2021-05-05 05:49:36

更好的方法是委托事件,这意味着在它冒泡到父节点时捕获它。

委托 - 概述

该解决方案更加稳健和高效。

即使稍后将更多行动态添加到表中,它也允许处理事件,并且还会导致将单个事件处理程序附加到父节点(table元素),而不是为每个子节点(tr元素)附加一个事件处理程序

假设 OP 的例子是一个简化的例子,表的结构可以更复杂,例如:

<table id="indexedTable">
    ...
    <tr>
        <td><p>1</p></td>
        <td>2</td>
        <td><p>3</p></td>
    </tr>
</table>

因此,像获取这样的简单方法是e.target.parentElement行不通的,因为单击内部<p>和单击中心<td>会产生不同的结果。

使用委托规范了事件处理,仅假设没有嵌套表。

执行

以下两个片段是等效的:

$("#indexedTable").delegate("tr", "click", function(e) {
    console.log($(e.currentTarget).index() + 1);
});

$("#indexedTable").on("click", "tr", function(e) {
    console.log($(e.currentTarget).index() + 1);
});

它们将侦听器附加到table元素并处理从表行中冒泡的任何事件。当前 API 是on方法,delegate方法是遗留 API(实际上on是在幕后调用)。

请注意,两个函数的参数顺序不同。

例子

下面或在 jsFiddle 上提供了直接处理程序附件和委托之间的比较:

这是jsFiddle上的演示

PS:

如果您确实有嵌套表(或者,在一般情况下,希望委托给具有特定深度的元素),您可以使用jQuery 错误报告中的这个建议

发送。我突然想到让表处理这个而不是行必须更好。大多数其他答案似乎都没有回答 OP 的问题:如何让桌子做到这一点......
2021-05-11 05:49:36

您可以使用object.rowIndex索引从 0 开始的属性。

$("table tr").click(function(){
    alert (this.rowIndex);
});

查看工作演示

一个简单且免费的 jQuery 解决方案:

document.querySelector('#elitable').onclick = function(ev) {
   // ev.target <== td element
   // ev.target.parentElement <== tr
   var index = ev.target.parentElement.rowIndex;
}

奖励:即使动态添加/删除行也能正常工作

这个答案值得更多赞。简单和无依赖总是好的。
2021-04-29 05:49:36
$('tr').click(function(){
 alert( $('tr').index(this) );
});

首先tr,它提醒0。如果你想提醒1,你可以将1添加到索引中。