JQuery:包含以下单词之一

时间:2012-01-28 22:53:25

标签: jquery contain

在这一行上,我试图选择包含其中一个单词的<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/

3 个答案:

答案 0 :(得分:2)

您必须单独使用每个逗号片段#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");

根据您的意见,如果您想按特定顺序将它们重新插入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/

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

答案 1 :(得分:1)

此过滤器变得如此复杂,您可能需要考虑使用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");

答案 2 :(得分:0)

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

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

所以它看起来像:

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