【问题标题】:jquery multiple selectors with AND OR condition带有AND OR条件的jquery多个选择器
【发布时间】:2013-07-17 18:29:21
【问题描述】:

如果我有一个有 4000 行的表

<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 or b or c) and (d or e) and (a or g)

如何编写选择器语句?

谢谢

【问题讨论】:

  • 您确定要这样做吗?加载此页面需要多长时间?

标签: javascript jquery html jquery-selectors


【解决方案1】:

试试这个:

$(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/

【讨论】:

    【解决方案2】:

    首先,4000 行似乎有点过多,而且无论您怎么想都会很慢。如果您只是想使用 JQuery 根据多种不同的类类型选择所有行,只需使用多选择器语法:

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

    这将选择所有具有类 a、b 或 c 的元素。从那里您可以使用 $.filter() 函数进一步过滤列表与其他类类型:

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

    这将首先选择所有具有类 a、b 或 c 的元素,然后它将过滤掉任何不包含类 d 或 e 的元素。您可以根据需要进行多次过滤,一旦到达最终列表,您可以使用 $.each() 函数遍历所有结果:

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

    【讨论】:

      【解决方案3】:

      试试这个:

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

      【讨论】:

      • 这个,但是把最排他的选择器放在第一位(在开始时过滤较小的集合)
      • 只需在 IE 7,8,9,10 中进行测试即可.. 完美运行~谢谢大佬~
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      相关资源
      最近更新 更多