2012-05-08 121 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>

相關問題