如何根据jQuery中的所有内容选择元素?

时间:2010-03-25 13:12:40

标签: javascript jquery

我有一系列<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。

4 个答案:

答案 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上找到。