2010-07-09 2 views
0

Я бы хотел, чтобы первые шесть столбцов GridView выполняли действие, но мне нужно выделить всю строку при нажатии. Вскрытие всего ряда работает, но я не могу получить захват первых 6 столбцов. Как получить первые 6 столбцов, щелкнув ниже, где находится тестовая переменная ?:jQuery вложенный фильтр

$("#<%= JobStreamSelectedDealsGridView.ClientID %> tr").filter(function() { 
    return $('td', this).length && !$('table', this).length 
}) 
.bind('click', function(e) { 
    if (_activeRow) _activeRow.removeClass('gridviewrow-highlighted'); 
    _activeRow = $(this).addClass('gridviewrow-highlighted'); 

    var testing = $('td:lt(6)', this); 

}); 
+0

Это работает на линии тестирования «var testing», но я не уверен, есть ли более чистый способ: if ($ ('td: lt (6)', this) .is ('td')) {alert ('inside?'); }; – RSchmitt

ответ

1

Вы можете сделать это следующим образом:

var _activeRow; 
$("#<%= JobStreamSelectedDealsGridView.ClientID %> tr") 
    .delegate('td:not(:has(table)):lt(6)', 'click', function(e) { 
    if (_activeRow) _activeRow.removeClass('gridviewrow-highlighted'); 
    _activeRow = $(this).closest('tr').addClass('gridviewrow-highlighted'); 
    });​ 

You can try it out here. Я не уверен в исключении родительских строк и дочерних таблиц, но я воспроизвел его здесь, так как я уверен, что у вас есть причина :)

Это использует .delegate(), чтобы уменьшить количество обработчиков событий , он прикрепляет обработчик событий к каждой строке, и когда кликнул <td>, то есть :lt(6) (менее 6-го индекса, на основе 0), мы поднимаемся до ближайшего <tr>, используя .closest() и выполняем манипуляции с классом.

+0

Я не знал о функции делегата - это будет трюк! Благодаря! – RSchmitt

0

Попробуйте это. Вы связываете клик даже с первыми 6 TD.

$("#<%= JobStreamSelectedDealsGridView.ClientID %> tr").filter(function() { 
    return $('td', this).length && !$('table', this).length 
}) 
find("td:eq(0), td:eq(1), td:eq(2), td:eq(3), td:eq(4), td:eq(5)").bind('click', function(e) { 
    if (_activeRow) _activeRow.removeClass('gridviewrow-highlighted'); 
    _activeRow = $(this).addClass('gridviewrow-highlighted'); 

    var testing = $(this); 

}); 
+0

Это захватит первые 6 строк, но не будет выделять всю строку. Но я мог бы использовать это и изменить _activeRow, чтобы получить родительский TR для выделения, я думаю. Все еще интересно, как я могу переместить фильтр поиска на строку «тестирование переменных» и выполнить функцию внутри этого? Как фильтр внутри фильтра. Как я могу сделать что-то подобное в строке «var testing»: $ (this) .find ("td: eq (0), td: eq (1), td: eq (2), td: eq (3), td: eq (4), td: eq (5) ") {function() {doStuff(); }} – RSchmitt

+0

Это фактически получит первые 6 столбцов любой строки. Наверное, я смущен тем, что тебе нужно. – Zacho

+0

В будущем, [': lt (6)'] (http://api.jquery.com/lt-selector/) :) –