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;

我想用这段代码做的是不包含<div>0 。

4

5 回答 5

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

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

顺便说一句,要回答 epascarello 的问题,这将匹配元素内的 ANY 子字符串 ANYWHERE。如果您的数字上升到 10,它也会匹配并打折那个数字。如果这对您来说是个问题,您将需要一个自定义选择器或一个.filter()函数。

于 2012-11-20T18:58:47.323 回答
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)");​
于 2012-11-20T19:01:07.913 回答
0

你可以试试这个: -

$(".test:not(:contains('0'))")
于 2012-11-20T19:00:57.267 回答
0

这是一个不使用:contains选择器的方法

你可以使用.filter()函数

$('.test').filter(function(){
    return $(this).text().indexOf('0') < 0 ;
});

检查小提琴

于 2012-11-20T19:01:08.523 回答
0

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

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

console.log(aa);

// results are ---> 1234
于 2012-11-20T19:08:46.977 回答