2012-11-20 18 views
5

È possibile selezionare tutti gli elementi con una determinata classe, ma non se contengono determinati .text()?Trova tutti gli elementi che non contengono una determinata stringa

Ecco quello che ho finora -

<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; 

Quello che voglio fare con questo codice è quello di non includere il <div> con 0 in esso.

+0

È inoltre possibile accedere direttamente '.length' su un oggetto jQuery. – pimvdb

+0

Può essere 10, 20, 100, ecc.? – epascarello

+0

hai problemi se uno di questi div ha un '0' in qualsiasi parte del testo. per quanto ne so, ': contains' non può prendere un'espressione regolare. – jbabey

risposta

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

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

Per inciso, per rispondere alla domanda di epascarello, questo corrisponderà a qualsiasi stringa ovunque all'interno dell'elemento. Se i tuoi numeri salgono a 10, corrisponderanno e scartano anche quello. Avrai bisogno di un selettore personalizzato o di una funzione .filter() se questo è un problema per te.

+0

+1, molto più veloce della sintassi a selezione singola (su chrome atleast) http://jsperf.com/psuedo-vs-chained-jb – jbabey

+0

@jbabey Non mi sorprende: analizzare il selettore significa lavorare di più motore jQuery per ottenere lo stesso risultato. Naturalmente, nel mondo reale, è improbabile che ci sia una differenza percepibile. – Blazemonger

0

Si può provare questo: -

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

+1 per una risposta corretta e per contrastare il downvoter senza commento casuale. – jbabey

+0

@jbabey: - Grazie mille.Ho frainteso la domanda previosuly forse questo è il motivo per cui ho avuto downvote :( –

3

Un google rapido ha portato questo alla superficie http://forum.jquery.com/topic/jquery-opposite-of-contains

Scende a questo

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

EDIT

A il test di @jbabey mostra th alla risposta accettato è più veloce, in modo da utilizzare che

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

Come un follow-on risposta di epascarello, il seguente selettore farà una corrispondenza esatta (questo non è incluso nel jQuery per difetto!)

$.expr[":"].econtains = function(obj, index, meta, stack){ 
    return (obj.textContent || obj.innerText || $(obj).text() || "").toLowerCase() == meta[3].toLowerCase(); 
} 

per fare una corrispondenza esatta, è ora possibile utilizzare

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

Qui è un metodo che non utilizza :contains selettore

È possibile utilizzare la funzione .filter()

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

Check Fiddle

0

Questo è anche uno dei modi per ottenere il testo desiderato: http://jsbin.com/arifuv/1/edit

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

console.log(aa); 

// results are ---> 1234 
Problemi correlati