我有一系列<div/>
如下:
<div>.co.uk</div>
<div>.com</div>
<div>.gb.com</div>
<div>.uk.com</div>
<div>.net</div>
如何只选择包含.co.uk
,.com
,.net
的div。
如果我使用:
$('div:contains(".co.uk"), div:contains(".com"), div:contains(".net")`)
这会导致同时选择.gb.com
和.uk.com
div。
答案 0 :(得分:5)
您可以使用filter
方法检查内容:
$('div').filter(function(){
var t = $(this).text();
return t == '.co.uk' || t == '.com' || t == '.net';
})
您可能仍希望在选择器中清除尽可能多的元素,以减少过滤器函数必须检查的元素数量。即使contains
伪类无法完全匹配,它仍可用于减少结果:
$('div:contains(".co.uk"), div:contains(".com"), div:contains(".net")`).filter(function(){
var t = $(this).text();
return t == '.co.uk' || t == '.com' || t == '.net';
})
答案 1 :(得分:1)
您最好的选择是使用.each()
遍历div并通过选中$(this).text()
来检查回调中的内容:
$('div').each(function() {
if ($(this).text().match(/^\.(com|net|co\.uk)$/)) {
// ...
}
});
答案 2 :(得分:1)
我是用过滤器做的:
jQuery.fn.pickDomains = function() {
var domains = jQuery.makeArray(arguments);
return this.filter(function(_, element) {
for (var d = 0; d < domains.length; ++d)
if (domains[d] == $(element).text()) return true;
return false;
});
};
然后你可以说:
var theDivs = $('div.whatever').pickDomains('.co.uk', '.com', '.net');
答案 3 :(得分:0)
我也曾多次面对这个问题,特别是因为我在Prototype中开发StartsWith function存在。可能只有循环遍历div并检查子字符串的方式,代码可以在previous similar question上找到。