2010-04-05 13 views
5

Ho una tabella che contiene 3 colonne. Ho bisogno di associare un evento che si attiva ogni volta che una di quelle colonne viene cliccata usando jQuery.Indice di elementi, jQuery o Javascript

Tuttavia, ho bisogno di sapere l'indice della colonna cliccato.

cioè: Prima colonna (indice 0), seconda colonna (indice 1), terza colonna (indice 2), e così via ...

Come posso fare questo?

var firstRow:

var firstRow = $("tr:first > th", "table[id*=Grid]"); 

Date un'occhiata:

firstrow.click(function(e){ 
//var id = e.target.index; 
var id = $(e).parent().children().index(this);//returns -1 
}) 
+0

Cosa sta 'firstrow'? il ''? È necessario acquisire il clic sul '' ... una funzione di delega con 'jQuery è l'approccio più pulito per farlo. –

+0

firstrow, prendi tutti gli elementi "" della prima riga – ozsenegal

risposta

6

È possibile farlo usando .index() (è 0 based), in questo modo:

$("td").click(function() { 
    var i = $(this).parent().children().index(this); 
    alert(i); 
}); 
+0

non penso, perché sto cercando di farlo con la funzione (e) {}. Es .: e.target.index – ozsenegal

+0

@ozsenegal - funziona, provalo: http://jsfiddle.net/F5ALE/ –

+0

no, non è abbastanza. Gli awalys restituiscono "-1". – ozsenegal

2

Potrebbe essere un'idea migliore per utilizzare javascript nativi .rowIndex anziché jQuerys .index. jQuery potrebbe avere qualche problema nel rilevare gli elementi della tabella (TH).

+0

Come useresti '.rowIndex' per ottenere l'indice di una colonna? –

+0

Dovrebbe essere 'this.cellIndex'. Ma sì: molto più semplice ed efficiente di fare jQuery cercare un elenco di nodi. – bobince

+0

sì, nel codice del gestore eventi click è this.rowIndex()/this.cellIndex() – jAndy

0

Mi è sempre piaciuto usando .prevAll()

$('table').click(function(e) { 
    var $targ = $(e.target); 
    if ($targ.is('th')) { 
    var position = $targ.prevAll().length; 
    alert(position); 
    } 
}); 

Preview on jsbin

Problemi correlati