2012-05-08 14 views
9

Sin jQuery, ¿cuál es la forma más eficiente de obtener la fila y el col (X, Y) de un onClick incluso dentro de una tabla?Cómo encontrar el número de fila y col de una celda en la tabla

Creo que asignar un oyente de clic a la tabla y dejar que suba a la cima funcionaría bien, pero en realidad solo me da el HTMLTableElement. Lo que quiero obtener de él es el número de Col y el número de fila de este oyente. ¿Es eso posible?

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

posible duplicado de [Javascript: Obtener Cell Ubicación] (http://stackoverflow.com/questions/4998953/javascript-get-cell-location) - por favor utilice la búsqueda antes haces una nueva pregunta –

+0

@Felix, busqué, y ninguna de las cadenas que utilicé tuvo esa pregunta. Esto debería funcionar bastante mejor para las personas que usan la búsqueda más adelante, ya que utiliza términos más comunes. –

+0

Basado en lo que Jonathan Sampson publicó, utilicé esto. http://jsbin.com/iqavad/edit#javascript,html –

Respuesta

17

Usted puede unirse a la mesa, pero eso sería dejar abierta la posibilidad de que pueda hacer clic en el espacio entre las células (que no tiene una fila o índice de células). En el siguiente ejemplo, he decidido que me vincularía a las celdas mismas y, por lo tanto, me aseguraría de tener siempre un índice de filas y celdas.

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

Demostración: http://jsbin.com/isedel/2/edit#javascript,html

supongo que se podría unir de forma segura a la mesa en sí también, y realizar una comprobación contra el elemento de fuente para ver si se trataba de una célula o no:

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

Demostración: http://jsbin.com/isedel/5/edit

+0

Su segundo ejemplo (http://jsbin.com/isedel/4/edit#javascript,html) no funciona para el primer col. Pero, ¡Dios mío, estás en el camino correcto! –

+0

@MarkTomlin Perdón por eso. Un 'cellIndex' de' 0' es falso. No estaba pensando bien. – Sampson

+0

¡http://jsbin.com/isedel/5/edit es perfecto! Muchas gracias! –

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

Aquí está la forma más sencilla de hacerlo.

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>

Cuestiones relacionadas