【问题标题】:JQuery : contain one of the following wordsJQuery : 包含以下单词之一
【发布时间】:2012-01-28 22:53:24
【问题描述】:

在这一行上,我试图选择包含这些单词之一但不包含图像但它不起作用的<tr>,基本上当我在页面上使用它时,页面是空白的。

$('#SubscribersManageList tr:contains("CIUDAD EVITA"), tr:contains("MORENO"), tr:contains("CORRIENTES"), tr:contains("LA MATANZA"), tr:contains("QUILMES"), tr:contains("LOMAS DE ZAMORA"), tr:contains("LANUS"), tr:contains("AVELLANEDA"), tr:contains("CORDOBA"), tr:contains("CAPITAL FEDERAL"), tr:contains("RAMOS MEJIA"):not(:has(img[src*="images/plus.gif"]))').css("background-color", "red").insertAfter("tr.Heading3:last");

如果该行包含以下任一单词,该怎么做,也许以更简单的方式?

你可以在这里测试:http://jsfiddle.net/cwar3/1/

【问题讨论】:

    标签: jquery contain


    【解决方案1】:

    您必须将#SubscribersManageList 与每个逗号分开,或者您可以像我在下面所做的那样,只将它作为上下文传递一次。我可能会这样写(为了便于阅读,分成多行 - 你必须把它放回一行才能使用它):

    $('tr:contains("CIUDAD EVITA"), 
       tr:contains("MORENO"), 
       tr:contains("CORRIENTES"), 
       tr:contains("LA MATANZA"), 
       tr:contains("QUILMES"), 
       tr:contains("LOMAS DE ZAMORA"), 
       tr:contains("LANUS"), 
       tr:contains("AVELLANEDA"), 
       tr:contains("CORDOBA"), 
       tr:contains("CAPITAL FEDERAL"), 
       tr:contains("RAMOS MEJIA")', $("#SubscribersManageList"))
           .not('img[src*="images/plus.gif"]')
           .css("background-color", "red")
           .insertAfter("tr.Heading3:last");
    

    根据您的 cmets,如果您想以特定顺序将它们重新插入 DOM,我建议这样做:

    var containValues = [
       "CIUDAD EVITA",
       "MORENO", 
       "CORRIENTES", 
       "LA MATANZA", 
       "QUILMES", 
       "LOMAS DE ZAMORA", 
       "LANUS", 
       "AVELLANEDA", 
       "CORDOBA", 
       "CAPITAL FEDERAL", 
       "RAMOS MEJIA" 
    ];
    
    var context = $("#SubscribersManageList");
    var target = context.find("tr.Heading3:last");
    for (var i = containValues.length - 1; i >= 0; i--) {
        context.find('tr:contains("' + containValues[i] + '")')
            .not('img[src*="images/plus.gif"]')
            .css("background-color", "red")
            .insertAfter(target);
    }
    

    您可以在这里看到它的工作原理:http://jsfiddle.net/jfriend00/MzgbV/

    这将一次遍历一个数组,查找、设置样式,然后插入每个数组,然后按数组顺序处理它们。它实际上是向后遍历数组,因此最后插入的数组首先结束。

    【讨论】:

    • 这不起作用,我刚刚测试过,你介意在这里尝试不同的版本,这样你就可以看看它是否有效? jsfiddle.net/cwar3/1
    • @Sebas - 这似乎对我有用:jsfiddle.net/jfriend00/fKWKG。我已将其简化为仅将项目变为红色,以便我可以更轻松地查看它的操作。
    • 好的,我看到它适用于 jquery 1.71,但不适用于 jquer im 使用的 1.32 为什么?
    • 实际上,它在 1.3.2 中对我有用:jsfiddle.net/jfriend00/fKWKG/4。为什么要使用这么旧版本的 jQuery?您的真实页面必须有所不同。您在等待加载 DOM 吗?
    • 好的,我更新到 1.71,但它仍然不适合我,所以版本不是问题
    【解决方案2】:

    此过滤器变得如此复杂,您可能需要考虑使用 jQuery.fn.filter 函数:

    $('#SubscribersManageList tr').filter(function(){
      if($(this).has('img[src*="images/plus.gif"]')){
        return false;
      }
      return ($(this).text().search(/(CIUDAD EVITA|MORENO|CORRIENTES|etc)/) > -1);
    })
    .css("background-color", "red")
    .insertAfter("tr.Heading3:last");
    

    【讨论】:

      【解决方案3】:

      您可以在.filter() 调用中使用正则表达式,而不是使用:contains

      $(selector).filter(function() 
      {
          return /some regex/.test( $(this).text() );
      });
      

      所以它看起来像:

      $('#SubscribersManageList tr').filter(function() 
      {
          return /CIUDAD EVITA|MORENO/.test( $(this).text() );
      });
      

      【讨论】:

        猜你喜欢
        • 2017-09-09
        • 2019-08-25
        • 2016-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-15
        • 1970-01-01
        相关资源
        最近更新 更多