2012-08-06 12 views
5

Devo filtrare una tabella html. Per fare ciò ho creato una callback per tutti gli elementi tr e testare se uno degli tr-children contiene un pattern specifico.Verifica se i bambini contengono un testo specifico con jQuery

$("#filter").keypress(function() { 
    var filter = $(this).val(); 

    $("#table1 tr[data-config]").each(function(){ 

     var val = $(this).find(":contains('" + filter + "')"); 

     if(val.length > 0){ 
      $(this).css("display","table-row"); 
     }else{ 
      $(this).css("display","none"); 
     } 
    }); 
}); 

Funziona, ma esiste una funzione per verificare se un elemento contiene del testo?

Al momento richiamo un elenco di tutti gli elementi contenenti il ​​modello e il conteggio se è maggiore di zero. Esiste una funzione jQuery, che verifica se questo modello si verifica e restituisce un valore booleano? La tabella può contenere molte righe e quindi voglio il più piccolo overhead possibile.

+0

Ciao, NaN, se vuoi pubblicare una risposta, ping me e io rimuoverò il mio (indicato come wiki della comunità). Altrimenti basta contrassegnare questo commento come obsoleto. Grazie! – brasofilo

risposta

4
///// replace these lines... 
// var val = $(this).find(":contains('" + filter + "')"); 
// if(val.length > 0){ 

///// with this line 
if($(this).text().match(filter)){ 

Questo funziona convertendo l'intero contenuto riga in una stringa di testo, quindi utilizzando semplice funzione di confronto di stringa per controllare se il filtro è contenuto all'interno del testo (e quindi la riga)

0

Quando il filtro è caso sensibile, questo è il modo per rendere insensibile:

.match("/pattern/i"); 

puntelli a Billy!

0

Le risposte sono buone, ma c'è un modo più semplice utilizzando: contiene

In generale, fare questo:

$(".class:contains('texttofind')").css("display", "none"); 

Con l'esempio specifico di cui sopra, fare questo:

$("#table1 tr[data-config]:contains('" + filter + "')").css("display","table-row"); 

Puoi trovare ulteriori informazioni qui: https://api.jquery.com/contains-selector/

Ciò evita di dover effettuare il ciclo con .each o .find.

Problemi correlati