2012-03-01 17 views
16

Ho una ricerca di input di testo che dovrebbe filtrare div in base al titolo del div. Ecco il codice che non funziona:Mostra div in base alla ricerca di testo

$('.contact-name').each(function(){ 
    var txt = $('#search-criteria').val(); 
    $('this').find(txt).show()  
}); 

Cosa sto facendo male?

MODIFICA: Per chiarire la variabile txt è ciò che l'utente ha digitato nel campo di immissione. Un esempio sarebbe se fosse txt Cha vorrei questa riga per mostrare:

<div class="contact-name"><h3><a href="##">Charles Smith</a></h3></div> 

risposta

41

provare questo

var txt = $('#search-criteria').val(); 
$('.contact-name:contains("'+txt+'")').show(); 

documentation for :contains() Selector

esempio violino: http://jsfiddle.net/WBvTj/2/

UPDATE CASO INSE NSITIVE:

var txt = $('#search-criteria').val(); 
$('.contact-name').each(function(){ 
    if($(this).text().toUpperCase().indexOf(txt.toUpperCase()) != -1){ 
     $(this).show(); 
    } 
}); 

Esempio violino: http://jsfiddle.net/WBvTj/4/

+0

Vedere la mia spiegazione aggiuntiva sopra. Sto osservando per valutare il testo all'interno del div. –

+0

ha aggiornato la risposta .. controlla che –

+0

funzioni per lo più, c'è un modo per rendere la custodia insensibile? –

0

Fortunatamente jQuery ha un selettore Contains:

$('.contact-name').each(function(){ 
    var txt = $('#search-criteria').val(); 
    $(this).find('div:contains("'+txt+'")').show()  
}); 
0

Procedimento find prende un selettore jQuery come parametro. Dubito che il tuo input di testo search_criteria conterrà quello. Supponendo che conterrà alcuni sottostringa del titolo del DIV, quindi provare questo:

var txt = $('#search-criteria').val();  
$('.contact-name').each(function(i, e){ 
    if($(e).attr("title").indexOf(txt)>=0) $(e).show(); 
}); 
0

Il seguente dovrebbe essere case-insensitive, e abbinare solo su testo in prima a href nel div:

var pattern = "/" + $('#search-criteria').val() + "/i"; 
$('.contact-name').filter(function() { 
    return $(this 'a:first-child').html().match(pattern).length > 0; 
}).show(); 

filtro dà un elenco di elementi che restituiscono true da quella funzione al suo interno per applicare show() a.
Il ritorno nella funzione filtro può essere letto come: "per il primo elemento di ancoraggio in questo elemento, prendere il contenuto, farlo corrispondere al modello e se la matrice risultante contiene uno o più risultati, restituire true".

La "i" alla fine del pattern è ciò che consente la corrispondenza senza distinzione tra maiuscole e minuscole.

Problemi correlati