2013-07-18 4 views
4

Если у меня есть таблица, которая имеет 4000 строкJQuery несколько селекторов с И ИЛИ условие

<table> 
<tr class="a b c d e f g"><td>xxx</td></tr> 
<tr class="a c d e f g"><td>xxx</td></tr> 
<tr class="d e f g"><td>xxx</td></tr> 
<tr class="a d e f g"><td>xxx</td></tr> 
. 
. 
. 
. 
. 
</table> 

Если я хочу выбрать строки, которые имеют классы (а или б или в) и (г или д) и (a или g)

Как я могу кодировать оператор селектора?

Благодаря

+0

Вы уверены, что хотите это сделать? Как долго эта страница загружается? –

ответ

11

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

$('.a, .b, .c').filter('.d, .e').filter('.a, .g') 
+2

http://jsfiddle.net/gvR9t/, кажется, показывает его работу – Ian

+2

Это, но сначала установите самый эксклюзивный селектор (фильтр на меньшем наборе в начале) –

+0

Просто выполните тестирование в IE 7,8,9,10. он отлично работает ~ Спасибо человеку ~ –

0

Во-первых, 4000 строк кажется немного чрезмерным и собирается не быть медленным, независимо от того, как вы об этом думаете. Если вы просто хотите использовать JQuery, чтобы выбрать все строки на основе целого ряда различных типов классов, просто использовать несколько синтаксис селекторов:

$('.a, .b, .c')... 

Это позволит выбрать все элементы с классом а, б или в. Оттуда вы можете использовать $ .filter() для дальнейшей фильтрации списка с другими типами классов:

$('.a, .b, .c').filter('.d, .e')... 

Начнётся, выбрав все элементы с классом A, B, или C, то он будет отфильтровывать все, что не содержит класса d, или e. Вы можете отфильтровать столько раз, сколько вы хотите, как только вы достигаете окончательный список, вы можете перебрать все результаты с $ .each() функция:

$result.each(function() { do stuff... }); 
0

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

$(document).ready(function() { 
    var items = $('.a,.b,.c').filter(function() { 
     var classes = $(this).prop('class').split(' '); 
     return (classes.indexOf('d') > 0 || classes.indexOf('e') > 0) && (classes.indexOf('a') > 0 || classes.indexOf('g') > 0) 
    }); 

    items.find('td').css('color', 'red'); 
}); 

См. Здесь: http://jsfiddle.net/UcYnu/

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