2014-01-23 3 views
0

У меня есть таблица с событием jquery onClick на tr-строках. Я хочу выделить текущую выбранную строку. «Чтобы выделить» означает: изменить цвет фона и обычный шрифт на курсивный шрифт. Поэтому я создал класс «selected_row», а в onClick я добавляю класс в строку. Раньше я удалял класс из всех остальных строк, чтобы удалить выделение из ранее выделенных строк. Дело в том, что он отлично работает, но только для каждой второй строки. Это работает в IE8. Я проверял инструменты разработчика в IE8, и хотя класс selected_row действительно применяется и видим там для каждой строки с индексом 1, 3, 5, ... это не применяется или видимо в дереве DOM в отладчике для строки с индексом 0, 2, 4, ... Я не знаю. Между строками с нечетным и четным индексом нет никакой разницы.jquery addClass применяется только к каждой второй строке таблицы

Вот часть кода:

table th { 
    background-color: #ededed; 
    padding: 5px; 
} 
table td { 
    padding: 5px; 
} 
.selected_row { 
    font-style: italic; 
    background-color: #eeeeee; 
} 

JavaScript:

var tableRowClickHandler = function() { 
    if ($(this).hasClass ("header")) { 
     // alert ('has class'); 
    } 
    else { 
     var _this = $(this) 
     if (_this.hasClass ("selected_row")) { 
      _this.removeClass ("selected_row"); 
     } 
     else { 
      $("tr").each (function() { 
      if (!$(this).hasClass ("header")) 
       $(this).removeClass ("selected_row"); 
      }); 
      _this.addClass ("selected_row"); 
     } 
    } 
}; 
+0

'$ ('. Selected_row'). RemoveClass ('selected_row')', чтобы удалить все предыдущие вхождения этого класса – Dharman

+0

выглядит отлично http://jsfiddle.net/arunpjohny/hkUCJ/1/ –

+2

это должно быть так просто как http://jsfiddle.net/arunpjohny/hkUCJ/2/ –

ответ

1

Я думаю, что вы можете сделать эту функцию меньше:

var tableRowClickHandler = function() { 
    if ($(this).hasClass ("header")) { 
     return; 
    } 
    else { 
     $("tr").removeClass ("selected_row"); 
     $(this).addClass ("selected_row"); 
    } 
}; 
+0

такой же эффект. Работает только в каждом втором ряду. – kaidentity

+0

Какую версию jquery вы используете? –

+0

1.7.1. Я расширил ваш пример jsfiddle, чтобы лучше соответствовать тому, что я на самом деле делаю. Таблица загружается динамически и асинхронно с помощью вызовов ajax. В упрощенном примере все работает хорошо. Также в моем реальном коде вызывается обработчик кликов, только $ (this) .addClass ('selected_row') не имеет никакого эффекта ... – kaidentity

0

Я решил эту проблему, не добавляя стили через класс, но по 2 индивидуальным вызовам css(), устанавливающим цвет и стиль шрифта. Это прекрасно работает, и этого достаточно для меня. Не знаю, почему он не работает с addClass().

Смежные вопросы