2009-12-07 21 views

Trả lời

18

Nếu bạn định nghĩa xử lý nhấp chuột trực tiếp trên tr yếu tố, bạn có thể sử dụng phương pháp index như thế này:

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

Nếu sự kiện nhấn là ràng buộc không trực tiếp trên các yếu tố tr (nếu bạn đang sử dụng một neo, một nút, vv ...), bạn nên tìm gần nhất tr để có được chỉ số đúng:

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

    return false; 
}); 

Hãy thử một ví dụ here.

+0

này sẽ không làm việc đúng nếu trang đó có nhiều bảng. Có lẽ tốt nhất là tìm kiếm các phần tử anh chị em ' '. –

+0

Không nên chọn bộ gọi $ .index() bị giới hạn trong bảng cha của bất kỳ TR nào được nhấp, thay vì thẻ bảng chung? – Sampson

+0

@TM, @Jonathan: là lỗi đánh máy, bị hạn chế đối với phần tử '# tableId' – CMS

0

này nên làm việc:

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

Bạn không cần tr trong cuộc gọi đến siblings nếu bạn chắc chắn html của bạn sẽ được well-formed.

1

Để trả lời câu hỏi đầu tiên của bạn:

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

Nếu bạn chỉ làm:

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

và bạn có nhiều bảng trên trang, bạn sẽ nhận được một kết quả sai lầm.

Điều đó đang được nói, bạn không cần biết chỉ mục để di chuyển các hàng lên xuống trong bảng. Ví dụ:

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

với một cái gì đó như:

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

Điểm tốt, bạn thực sự không cần chỉ mục chút nào. –

Các vấn đề liên quan