2012-05-08 17 views
9

Non si utilizza jQuery, qual è il modo più efficiente di ottenere la riga e il passo (X, Y) di un onClick anche all'interno di una tabella?Come trovare il numero di riga e colonna di una cella nella tabella

Penso che assegnare un ascoltatore di clic solo al tavolo e far sì che la bolla raggiunga il massimo funzionerebbe bene, ma in realtà mi dà solo il HTMLTableElement. Quello che voglio ottenere da esso è il numero Col e il numero di riga di questo ascoltatore. È possibile?

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

possibile duplicato di [Javascript: Get cellulare Location] (http://stackoverflow.com/questions/4998953/javascript-get-cell-location) - si prega di utilizzare la ricerca prima fai una nuova domanda –

+0

@Felix, ho fatto la ricerca, e nessuna delle stringhe che ho usato mi è venuta in mente. Questo dovrebbe funzionare un po 'meglio per le persone che usano la ricerca più tardi in quanto utilizza termini più comuni. –

+0

In base a ciò che ha pubblicato Jonathan Sampson, l'ho usato. http://jsbin.com/iqavad/edit#javascript,html –

risposta

17

Si potrebbe legarsi al tavolo, ma che lascerebbe aperta la possibilità che si potrebbe fare clic all'interno della spaziatura tra le celle (che non ha una riga o indice di cella). Nell'esempio seguente ho deciso che legherei alle celle stesse e quindi assicurerei sempre un indice di riga e di cella.

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

suppongo che si possa tranquillamente associare alla tabella stessa troppo, ed eseguire un controllo contro l'elemento sorgente per vedere se era una cella oppure 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); 
} 

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

+0

Il tuo secondo esempio (http://jsbin.com/isedel/4/edit#javascript,html) non funziona per la prima colonna. Ma mio Dio, sei sulla buona strada! –

+0

@MarkTomlin Ci scusiamo. Un 'cellIndex' di' 0' è falsy. Non stava pensando bene. – Sampson

+0

http://jsbin.com/isedel/5/edit è perfetto! Grazie mille! –

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

Ecco il modo più semplice per farlo.

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>

Problemi correlati