2

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

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

4

3 回答 3

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/

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

于 2012-01-28T22:59:47.310 回答
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");
于 2012-01-28T23:03:01.600 回答
0

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

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

所以它看起来像:

$('#SubscribersManageList tr').filter(function() 
{
    return /CIUDAD EVITA|MORENO/.test( $(this).text() );
});
于 2012-01-28T22:59:16.403 回答