Как найти индекс строки в таблице с помощью jquery - PullRequest
21 голосов
/ 22 января 2009

Я пытаюсь найти индекс строки в таблице. Я пытаюсь использовать следующий код, но мне кажется, что индекс равен -1.

$(document).ready(function()
{
    $("tr").click(function (){
        var index = $("table").index($(this));
        $("span").text("That was row index #" + index);
    });
});

С HTML, который выглядит так;

<table>
<tbody>
    <tr><td>click</td></tr>
    <tr><td>click</td></tr>
    <tr><td>click</td></tr>
    <tr><td>click</td></tr>
</tbody>

Спасибо

Ответы [ 4 ]

38 голосов
/ 22 января 2009

Вы пробовали:

$("tr").index(this)

Документация показывает, как просто передать это, и что предыдущий выбор должен быть там, где находится узел. Если вам нужно найти его в определенной таблице (а их несколько), вам может потребоваться указать некоторый контекст:

// haven't tested this
$("tr", $(this).closest("table")).index(this) 
11 голосов
/ 22 января 2009

Попробуйте:

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

Документация для index() гласит:

Ищет каждый соответствующий элемент для поиска объект и возвращает индекс элемент, если найден, начиная с нуля. Если передается объект jQuery, только первый элемент проверен.

Вам необходимо вызвать index() для набора <tr> элементов, а не для родительского элемента <table>.

2 голосов
/ 04 января 2013

На основании ответа Робса, чтобы найти индекс в конкретной таблице, это сработало для меня.

var index = $('tr', $(this).closest("table")).index(this);
1 голос
/ 19 мая 2018

Я только что нашел интересную уловку, которая в основном состоит в подсчете предыдущих братьев и сестер:

var tr = $(some_selector);
var rowIndex = tr.prevAll().length;

Таким образом, вы получите 0, если это первый tr, 3, если это 4-й tr и т. Д.

Просто ради этого есть еще одна опция, использующая index(), которая избавляет вас от необходимости знать, как выбрать содержащую таблицу:

var rowIndex = tr.parent().children().index(tr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...