2012-05-08 21 views
9

Không sử dụng jQuery, cách hiệu quả nhất để tận dụng Row và Col (X, Y) của một onClick thậm chí trong một bảng là gì?Làm thế nào để tìm hàng và col số một ô trong bảng

Tôi sẽ nghĩ rằng chỉ định một người nghe nhấp chuột vào bảng, và để cho nó bong bóng lên đầu sẽ hoạt động tốt, nhưng thực sự nó chỉ mang lại cho tôi HTMLTableElement. Những gì tôi muốn nhận được từ nó là số Col, và số Row từ người nghe này. Điều đó có thể không?

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

thể trùng lặp của [Javascript: Nhận di Location] (http://stackoverflow.com/questions/4998953/javascript-get-cell-location) - vui lòng sử dụng tìm kiếm trước bạn hỏi một câu hỏi mới. –

+0

@Felix, tôi đã tìm kiếm, và không ai trong số các dây Tôi đã từng nảy ra câu hỏi đó. Điều này sẽ hoạt động tốt hơn một chút đối với những người sử dụng tìm kiếm sau này vì nó sử dụng các thuật ngữ phổ biến hơn. –

+0

Dựa trên những gì Jonathan Sampson được đăng, tôi đã sử dụng này. http://jsbin.com/iqavad/edit#javascript,html –

Trả lời

17

Bạn có thể liên kết với bàn, nhưng điều đó sẽ để ngỏ khả năng mà bạn có thể nhấp vào trong vòng khoảng cách giữa các tế bào (mà không có một hàng hoặc chỉ số tế bào). Tôi đã quyết định trong ví dụ dưới đây rằng tôi sẽ liên kết với các tế bào thân, và do đó đảm bảo tôi sẽ luôn luôn có một chỉ số hàng và tế bào.

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); 
    } 
} 

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

Tôi cho rằng bạn có thể yên tâm liên kết với các bảng riêng của mình quá, và thực hiện một kiểm tra chống lại các yếu tố nguồn để xem nếu nó là một tế bào hay không:

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); 
} 

Demo: http://jsbin.com/isedel/5/edit

+0

Ví dụ thứ hai của bạn (http://jsbin.com/isedel/4/edit#javascript,html) không hoạt động đối với col đầu tiên. Nhưng thần của tôi, bạn đi đúng hướng! –

+0

@MarkTomlin Xin lỗi về điều đó. Một 'cellIndex' của' 0' là sai. Đã không suy nghĩ đúng. – Sampson

+0

http://jsbin.com/isedel/5/edit là hoàn hảo! Cảm ơn bạn rất nhiều! –

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

đây là cách đơn giản nhất để làm điều đó.

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>

Các vấn đề liên quan