2010-04-05 10 views
5

Tengo una tabla que contiene 3 columnas. Necesito vincular un evento que se active siempre que se haga clic en una de esas columnas con jQuery.Índice de elementos, jQuery o Javascript

Sin embargo, necesito saber el índice de la columna en que se hizo clic.

es decir: La primera columna (índice 0), segunda columna (índice 1), tercera columna (índice 2), y así sucesivamente ...

¿Cómo puedo hacer eso?

var FIRSTROW:

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

Echale un vistazo:

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

lo que está 'firstrow'? el ''? Debe capturar el clic en '' ... una función de delegado con 'jQuery es el enfoque más limpio para hacer eso. –

+0

firstrow, tome todos los elementos "" de la primera fila – ozsenegal

Respuesta

6

Usted puede hacer esto utilizando .index() (que es 0 en base), así:

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

no lo creo, porque estoy tratando de hacer esto con la función (e) {} .es decir: e.target.index – ozsenegal

+0

@ozsenegal - funciona, pruébelo:) http://jsfiddle.net/F5ALE/ –

+0

no, eso no es todo. Es awalys el que devuelve "-1". – ozsenegal

2

Podría ser una mejor idea para utilizar javascripts nativos .rowIndex en lugar de jQuerys .index. jQuery puede tener algunos problemas para detectar elementos de cabecera de tabla (TH).

+0

¿Cómo usarías '.rowIndex' para obtener el índice de una columna? –

+0

Debe ser 'this.cellIndex'. Pero sí: mucho más simple y más eficiente que hacer que jQuery busque una lista de nodos. – bobince

+0

sí, dentro de su código de controlador de eventos click se this.rowIndex()/this.cellIndex() – jAndy

0

siempre me ha gustado usar .prevAll()

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

Preview on jsbin

Cuestiones relacionadas