jQuery:包含select器来search多个string

假设我有:

<li id="1">Mary</li> <li id="2">John, Mary, Dave</li> <li id="3">John, Dave, Mary</li> <li id="4">John</li> 

如果我需要find包含“John”和“Mary”的所有<li>元素,我将如何构buildjQuery?

search一个string似乎很容易:

 $('li:contains("John")').text() 

我正在寻找像下面的伪代码:

 $('li:contains("John")' && 'li:contains("Mary")').text() 

谢谢!

回答

就像这样:

 $('li:contains("Mary"):contains("John")') 

说明

只要想想:contains就好像它是一个类声明,就像.class

 $('li.one, li.two'). //you want either one OR two $('li.one.two'). //you want BOTH on one element // same with :contains $('li:contains("mary"), li:contains("john")'). // either mary OR john $('li:contains("mary"):contains("john")'). //li, which contains both 

演示

http://jsbin.com/ejuzi/edit

怎么样

 $('li:contains("John"),li:contains("Mary")') 

回答

正确的语法是$("li:contains('John'),li:contains('Mary')").css("color","red")

但是我发现,如果你有很多需要testing的情况,jQuery会performance得非常糟糕(特别是在IE6上,我知道它已经很老了,但仍然在使用中)。 所以我决定写我自己的属性filter。

这是如何使用它: $("li:mcontains('John','Mary')").css("color","red")

 jQuery.expr[':'].mcontains = function(obj, index, meta, stack){ result = false; theList = meta[3].split("','"); var contents = (obj.textContent || obj.innerText || jQuery(obj).text() || '') for (x=0;x<theList.length;x++) { if (contents.indexOf(theList[x]) >= 0) { return true; } } return false; }; 

这很容易:

 $("li:contains('John'):contains('Mary')")