假设我有:
<li id="1">Mary</li>
<li id="2">John, Mary, Dave</li>
<li id="3">John, Dave, Mary</li>
<li id="4">John</li>
如果我需要找到所有&lt; li&gt;包含“John”和“Mary”的元素,我将如何构造jQuery?
搜索单个字符串似乎很简单:
$('li:contains("John")').text()
我正在寻找类似下面的伪代码:
$('li:contains("John")' && 'li:contains("Mary")').text()
谢谢!
答案 0 :(得分:106)
要查找包含BOTH Mary AND 约翰的文字的li
:
$('li:contains("Mary"):contains("John")')
要查找包含EITHER Mary OR 约翰的文字的li
:
$('li:contains("Mary"), li:contains("John")')
只需将:contains
视为类声明,如.class
:
$('li.one.two'). // Find <li>'s with classes of BOTH one AND two
$('li.one, li.two'). // Find <li>'s with a class of EITHER one OR two
与:contains
:
$('li:contains("Mary"):contains("John")'). // Both Mary AND John
$('li:contains("Mary"), li:contains("John")'). // Either Mary OR John
答案 1 :(得分:7)
怎么样
$('li:contains("John"),li:contains("Mary")')
答案 2 :(得分:4)
正确的语法是$("li:contains('John'),li:contains('Mary')").css("color","red")
但是我发现如果你有很多案例要测试,jQuery会表现得非常糟糕(特别是在IE6上,我知道,它已经老了但仍在使用中)。所以我决定编写自己的属性过滤器。
这是如何使用它:$("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;
};
答案 3 :(得分:1)
很简单:
$("li:contains('John'):contains('Mary')")