2009-12-07 8 views

Odpowiedz

18

Jeśli określona procedura obsługi kliknięcia bezpośrednio na tr elementów, można użyć metody index takiego:

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

Jeżeli zdarzenie click jest zobowiązany nie bezpośrednio na elemencie tr (jeśli używasz kotwica, przycisk, itp ...), należy znaleźć najbliższy tr aby uzyskać odpowiedni indeks:

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

    return false; 
}); 

Spróbuj przykład here.

+0

To nie będzie działać prawo, jeśli strona zawiera wiele tabel. Prawdopodobnie najlepiej będzie szukać elementów 'rodzeństwa' '. –

+0

Czy selektor wywołania $ .index() nie powinien być ograniczony do tabeli nadrzędnej kliknięcia TR, a nie do ogólnego znacznika tabeli? – Sampson

+0

@TM, @ Jonathan: był literówka, ograniczony do elementu "# tableId". – CMS

0

To powinno działać:

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

Nie trzeba tr w wywołaniu siblings jeśli jesteś pewien, że twój html będzie dobrze uformowane.

1

Aby odpowiedzieć na pierwsze pytanie:

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

Jeśli po prostu zrobić:

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

i masz wiele tabel na stronie, otrzymasz błędny wynik.

W związku z tym nie trzeba znać indeksu, aby przenosić wiersze w górę iw dół w tabeli. Na przykład:

<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> 

o coś takiego:

$("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

Dobrze, właściwie nie potrzebujesz w ogóle indeksu. –

Powiązane problemy