2009-12-07 18 views

Respuesta

18

Si ha definido el controlador de clic directamente sobre las tr elementos, puede utilizar el método index así:

$('#tableId tr').click(function() { 
    var rowIndex = $('#tableId tr').index(this); //index relative to the #tableId rows 
}); 

Si el evento de clic está obligado a no directamente sobre el elemento tr (si está utilizando una ancla, un botón, etc ...), usted debe encontrar el más cercano tr para obtener el índice derecho:

$(selector).click(function() { 
    var rowIndex = $('#tableId tr').index($(this).closest('tr')); 

    return false; 
}); 

probar un ejemplo here.

+0

esto no funcionará bien si la página tiene varias tablas. Probablemente sea mejor buscar elementos hermanos ''. –

+0

¿No debería el selector de la llamada $ .index() restringirse a la tabla primaria de cualquier TR en que se haya hecho clic, en lugar de una etiqueta de tabla genérica? – Sampson

+0

@TM, @Jonathan: era un error tipográfico, restringido a un elemento '# tableId' – CMS

0

Esto debería funcionar:

$('#tableId tr').click(function() { 
    var index = $(this).siblings('tr').index(this); 
}); 

No es necesario tr en la llamada a siblings si está seguro será bien formado su html.

1

Para responder a su primera pregunta:

$("#id tr").click(function() { 
    alert($("#id tr").index(this)); 
}); 

Si usted acaba de hacer:

$("table tr").index(this); 

y tiene múltiples tablas de la página, obtendrá un resultado erróneo.

Dicho esto, no necesita saber el índice para mover las filas hacia arriba y hacia abajo en una tabla. Por ejemplo:

<table id="foo"> 
<tr> 
    <td><a href="#" class="up">Up</a> <a href="#" class="down">down</a></td> 
    <td>First row</td> 
</tr> 
<tr> 
    <td><a href="#" class="up">Up</a> <a href="#" class="down">down</a></td> 
    <td>Second row</td> 
</tr> 
<tr> 
    <td><a href="#" class="up">Up</a> <a href="#" class="down">down</a></td> 
    <td>Third row</td> 
</tr> 
</table> 

con algo como:

$("a.up").click(function() { 
    var row = $(this).closest("tr"); 
    if (row.prev().length > 0) { 
    row.insertBefore(row.prev()); 
    } 
    return false; 
}); 
$("a.down").click(function() { 
    var row = $(this).closest("tr"); 
    if (row.next().length > 0) { 
    row.insertAfter(row.next()); 
    } 
    return false; 
}); 
+0

Buen punto, en realidad no necesita el índice en absoluto. –

Cuestiones relacionadas