如何查找表中单元格的行号和列号

How to find row and col number of a cell in table

本文关键字:单元格 何查找 查找      更新时间:2023-09-26

不使用jQuery,即使在表中获取onClick的行和列(X,Y)的最有效方法是什么?

我认为将点击侦听器分配给表,并让它冒泡到顶部会很好,但实际上它只是给了我 HTMLTableElement。我想从中得到的是 Col 编号和来自这个侦听器的行号。这可能吗?

window.onload = function () {
 document.getElementsByTagName('table')[0].addEventListener('click', function() {
  alert(this.tagName);
 }, false);
}

您可以绑定到表格,但这会使您在单元格之间的间距内单击(没有行或单元格索引)的可能性。在下面的示例中,我已决定绑定到单元格本身,从而确保我始终具有行和单元格索引。

var tbl = document.getElementsByTagName("table")[0];
var cls = tbl.getElementsByTagName("td");
function alertRowCell(e){
  var cell = e.target || window.event.srcElement;
  alert( cell.cellIndex + ' : ' + cell.parentNode.rowIndex );
}
for ( var i = 0; i < cls.length; i++ ) {
  if ( cls[i].addEventListener ) {
    cls[i].addEventListener("click", alertRowCell, false);
  } else if ( cls[i].attachEvent ) {
    cls[i].attachEvent("onclick", alertRowCell);
  }
}

演示:http://jsbin.com/isedel/2/edit#javascript,html

我想您也可以安全地绑定到表本身,并对源元素执行检查以查看它是否是单元格:

var tbl = document.getElementsByTagName("table")[0];
function alertRowCell (e) {
  var cell = e.target || window.event.srcElement;
  if ( cell.cellIndex >= 0 )
    alert( cell.cellIndex + ' : ' + cell.parentNode.rowIndex );
}
if ( tbl.addEventListener ) {
  tbl.addEventListener("click", alertRowCell, false);
} else if ( tbl.attachEvent ) {
  tbl.attachEvent("onclick", alertRowCell);
}

演示:http://jsbin.com/isedel/5/edit

这是最简单的方法。

window.onload = function () {
  document.querySelector('#myTable').onclick = function(ev) {
    var rowIndex = ev.target.parentElement.rowIndex;
    var cellIndex = ev.target.cellIndex;
    alert('Row = ' + rowIndex + ', Column = ' + cellIndex);
  }
}
<table border="1" id="myTable">
    <tr>
        <td>first row first column</td>
        <td>first row second column</td>
    </tr>
    <tr>
        <td>second row first column</td>
        <td>second row second column</td>
    </tr>
    <tr>
        <td>third row first column</td>
        <td>third row second column</td>
    </tr>
</table>

window.onload = function () {
 document.getElementsByTagName('table')[0].addEventListener('click', function(e) {
  alert(e.target);
 }, false);
}