查找所有不包含特定字符串的元素

5

是否有可能选择所有带有特定类的元素,但不包含特定 .text() 的元素?

以下是我目前的代码 -

<div class="test">0</div>
<div class="test">1</div>
<div class="test">2</div>
<div class="test">3</div>
<div class="test">4</div>

var divList = $(".test").toArray();
var divLength = divList.length;

我想要做的是在这段代码中不包含带有数字0的
标签。

你也可以直接在 jQuery 对象上访问 .length - pimvdb
如果这些div中的任何一个文本中有一个0,那么你将会遇到问题。据我所知,:contains不能使用正则表达式。 - jbabey
5个回答

10
$('.test').not(':contains(0)')

http://api.jquery.com/contains-selector/

顺便回答epascarello的问题,这将匹配元素内的任何子字符串。如果您的数字达到10,它也会匹配并排除那个数字。如果这是一个问题,您需要一个自定义选择器或.filter()函数。


+1,比单选择器语法要快得多(至少在Chrome上)。http://jsperf.com/psuedo-vs-chained-jb - jbabey
@jbabey 我并不感到惊讶--解析选择器意味着jQuery引擎需要额外的工作来获得相同的结果。当然,在现实世界中,很难有任何可察觉的区别。 - Blazemonger

3

一个快速的谷歌搜索将这个帖子找到了 http://forum.jquery.com/topic/jquery-opposite-of-contains

归纳起来就是这样

$(".test:not(:contains('0'))")

编辑

@jbabey的测试表明,被接受的答案更快,请使用该答案。

$(".test").not(":contains(0)");

作为对 epascarello 答案的跟进,以下选择器将进行完全匹配(jQuery 默认没有包含此功能!)
$.expr[":"].econtains = function(obj, index, meta, stack){
    return (obj.textContent || obj.innerText || $(obj).text() || "").toLowerCase() == meta[3].toLowerCase();
}

为进行精确匹配,您现在可以使用

$(".test").not(":econtains(0)");​

0
你可以尝试这个:-
$(".test:not(:contains('0'))")

+1 作为正确答案的奖励,也是为了抵消匿名的恶意评分者。 - jbabey
@jbabey:非常感谢。我之前可能误解了问题,所以才会被踩票 :( - Rahul Tripathi

0
这里有一个不使用:contains选择器的方法。
你可以使用.filter()函数。
$('.test').filter(function(){
    return $(this).text().indexOf('0') < 0 ;
});

检查 Fiddle


0

这也是获取所需文本的方式之一:http://jsbin.com/arifuv/1/edit

var aa = $('.test').filter(':not(:contains(0))').text();

console.log(aa);

// results are ---> 1234

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接