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
演示
怎么样
$('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')")