2012-05-02 2 views
0

У меня возникла проблема с использованием метода фильтра jquery.селектор фильтра jquery против метода фильтра

Если у меня есть

$("#resultDiv tr:odd").addClass("alternate_row"); 

все строки внутри DIV «resultDiv», который содержит таблицу приведены альтернативный класс строк.

Однако, если я использую

$('#resultDiv').filter("tr:odd").addClass("alternate_row"); 

Он не появляется, чтобы соответствовать каким-либо элементам, и ничто не имеет класса применяется.

Мне нужно использовать метод фильтра, поскольку я делаю несколько других вещей, проходящих переменные вокруг.

Что мне не хватает?

+0

Так же, как мысль, если вы пытаетесь добавить классы для стилизации (например, полоса зебры), и вам не нужно поддерживать старые браузеры, вы также можете посмотреть селектор nth-child CSS3. –

+0

К сожалению, нам приходится поддерживать старые браузеры, поэтому я решил пойти так –

ответ

4

В вашей первой версии:

$('#resultDiv').filter("tr:odd").addClass("alternate_row")

.filter()удаляет несовпадающих элементов из набора, и никто из ваших #resultDiv элементов являются tr, поэтому фильтр не соответствует что-нибудь.

Try:

$('#resultDiv').find("tr:odd").addClass("alternate_row"); 

который явно добавляет нового потомок узлы, которые матча селектор tr:odd или

$('#resultDiv tr').filter(":odd").addClass("alternate_row"); 

, который использует один селектор, чтобы найти всехtr элементов, а затем использует .filter, чтобы выбрать нечетные.

+0

, так почему первый селектор работает? –

+3

@ DanielPowell в вашем вопросе? Поскольку первый селектор явно находит потоки «tr». '.filter() 'не _find_ новых узлов, он только уменьшает текущий сопоставленный набор. – Alnitak

2

Я предполагаю, что #resultDiv является родителем всех <tr>-х, так что я думаю, что вы хотите:

$('#resultDiv tr').filter(":odd").addClass("alternate_row"); 
5

С второго селектора вы выбираете элемент с идентификатором #resultDiv и применить фильтр Это. Но это, вероятно, не коллекция, просто таблица или что-то еще.

Вы должны выбрать tr элементы и применить фильтр к ним:

$('#resultDiv tr').filter(":odd").addClass("alternate_row"); 

Таким образом, вы будете иметь tr коллекцию, чтобы применить фильтр.

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