2012-11-20 115 views
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。

+0

您也可以直接訪問'.length'在一個jQuery對象上。 – pimvdb

+0

可以是10,20,100等嗎? – epascarello

+0

如果其中一個div在文本中的任何位置有「0」,那麼您將遇到問題。據我所知,':contains'不能帶正則表達式。 – jbabey

回答

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

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

順便說一下,回答epascarello的問題,這將在任何地方元素內匹配任何字符串。如果你的數字上升到10,那麼它會匹配和折扣。如果這對您而言是個問題,您需要自定義選擇器或.filter()函數。

+0

+1,比單選器語法快得多(在chrome atleast上)http://jsperf.com/psuedo-vs-chained-jb – jbabey

+0

@jbabey我並不感到驚訝 - 解析選擇器意味着額外的工作jQuery引擎獲得相同的結果。當然,在現實世界中,不可能有任何明顯的差異。 – Blazemonger

0

你可以試試這個: -

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

+1以獲得正確的答案並抵消隨機無效的downvoter。 – jbabey

+0

@jbabey: - 非常感謝。我之前誤解了這個問題也許這就是爲什麼我downvote :( –

3

快速谷歌帶來了這表面http://forum.jquery.com/topic/jquery-opposite-of-contains

它歸結到這一點

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

編輯

一@jbabey測試顯示th在接受的答案是更快,所以使用

$(".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

這裏是不使用:contains選擇的方法

可以使用.filter()功能

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

Check Fiddle

0

這也是以獲得所需的文本的方式之一:http://jsbin.com/arifuv/1/edit

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

console.log(aa); 

// results are ---> 1234 
相關問題