2012-05-08 73 views
9

不使用jQuery,甚至在表格中获取onClick的行和列(X,Y)的最有效方法是什么?如何查找表格中单元格的行号和列号

我认为只需将一个点击监听器分配给该表,并让它出现在顶端就可以工作,但实际上它只是给我提供了HTMLTableElement。我想从中得到的是Col号码,以及来自这一位听众的行号。那可能吗?

​​
+0

可能重复[使用Javascript:获取小区位置(http://stackoverflow.com/questions/4998953/javascript-get-cell-location) - 使用前请先搜索你问一个新问题。 –

+0

@Felix,我搜索了,而且我用的字符串都没有提出这个问题。对于稍后使用搜索的用户来说,这应该会更好一些,因为它使用更常见的术语。 –

+0

根据Jonathan Sampson发布的内容,我使用了这个。 http://jsbin.com/iqavad/edit#javascript,html –

回答

17

你可以绑定表中,但会保持开放,你可能单元格之间的间距(不具有行或单元格指数)内点击的可能性。我在下面的例子中决定,我将绑定到单元格本身,从而确保我总是有一个行和单元格索引。

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

+0

您的第二个示例(http://jsbin.com/isedel/4/edit#javascript,html)不适用于第一个列。但是我的上帝,你在正确的轨道上! –

+0

@MarkTomlin对不起。 '0'的'cellIndex'是虚假的。不正确的想法。 – Sampson

+0

http://jsbin.com/isedel/5/edit是完美的!非常感谢! –

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

这是最简单的方法来做到这一点。

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>

相关问题