2009-10-25 2 views
14

Я являюсь промежуточным пользователем в jQuery. Я знаю, чтобы найти rowIndex таблицы, используя jquery, но мой сценарий отличается. Моя таблица (GridView) состоит из 20 столбцов и каждого столбца с различными элементами управления, такими как текстовое поле, выпадающий список, изображение, ярлык. Все элементы управления на стороне сервера в каждой строке. Я связываю gridview с записями из базы данных. Теперь, когда я нажимаю на какой-либо элемент управления или заменяет любое текстовое поле, мне нужно получить rowIndex этой строки с измененным столбцом. Вот код, который у меня есть:Найти индекс таблицы строк, используя jQuery

$("#gv1 tr input[name $= 'txtName']").live('click', function(e){ 
    alert($(this).closest('td').parent().attr('sectionRowIndex')); 
}); 

Но я не могу получить rowIndex. Если я использую любой элемент управления html внутри gridview, я могу получить rowIndex. Есть ли способ узнать rowIndex при щелчке по серверному элементу внутри gridview?

ответ

44

Попробуйте это:

var rowIndex = $(this) 
    .closest('tr') // Get the closest tr parent element 
    .prevAll() // Find all sibling elements in front of it 
    .length; // Get their count 
+0

Но я хочу получить RowIndex измененного Textbox? – superachu

+0

Не могли бы вы предоставить HTML-код вашей страницы? –

+0

1 <входной тип = "текст" идентификатор = значение "gv1_ctl02_txtName" = "Ачу" имя = "GV1 $ ctl02 $ txtName" /> <входной тип = "текст" значение = "Мадурай" ID = "txtLocation" /> когда я нажимаю на gv1_ctl02_txtName, я не буду получать RowIndex, но когда Я нажимаю на «txtLocation», я могу получить. – superachu

4

Это для флажка в ячейке таблицы, на смену:

var row = $(this).parent().parent(); 
var rowIndex = $(row[0].rowIndex); 
console.log(rowIndex); 
9

sectionRowIndex является собственностью <tr> элемента, а не атрибут.

Правильный способ изменить свой образец кода, чтобы получить доступ к элементу JQuery с нулевым индексатор, как это:

$("#gv1 tr input[name $= 'txtName']").live('click', function(e){ 
    alert($(this).closest('td').parent()[0].sectionRowIndex); 
}); 

Это вернет правильный индекс строки для вас. Кроме того, если вы собираетесь использовать функцию jQuery .closest() для перемещения по DOM, а также .parent(), почему бы не составить эти два и просто переместиться до ближайшего элемента <tr>?

Это также будет обрабатывать странные случаи, когда родительские -> детские отношения - это не то, что вы ожидали. Например, если вы связали $(this).parent().parent(), а затем решили обернуть свою внутреннюю ячейку другим div или span, вы можете испортить отношения. .closest() - это простой способ убедиться, что он всегда будет работать.

Конечно, мои образцы кода повторно используют предоставленный вами образец выше. Сначала вы можете протестировать более простой селектор, чтобы доказать, что он работает, а затем уточните свои селекторы.

1

Должно быть в состоянии просто использовать:

var rowIndex = $(this).parents("tr:first")[0].rowIndex; 
Смежные вопросы