2012-01-09 15 views
8

Sto provando a confrontare una stringa fornita in un input al contenuto di un div utilizzando jQuery contain.jQuery utilizzo di contiene e toLowerCase()

Il problema è che voglio essere in grado di controllare se la stringa è contenuta indipendentemente dal maiuscolo/minuscolo.

Questa è la mia funzione:

$(document).ready(function() { 
    drawDimensions('dContent'); 
    $('#dSuggest').keyup(function() { 
     var dInput = this.value; 
     $(".dDimension:contains('" + dInput + "')").css("display","block"); 
    }); 
}); 

Quindi, se uno dei div .dDimension contiene 'Data' e un utente preme il tasto 'd', voglio mostrare tale elemento.

è possibile?

+1

possibile duplicato del [Esiste un case insensitive jQuery: contiene selettore?] (http://stackoverflow.com/questions/187537/is-there-a-case-insensitive-jquery-contains-selector) –

risposta

18

È possibile utilizzare .filter[docs]:

var dInput = this.value.toLowerCase(); 

$(".dDimension").filter(function() { 
    return $(this).text().toLowerCase().indexOf(dInput) > -1; 
}).css("display","block"); 
+0

posso usare la funzione '' not'' per verificare il contrario? –

+0

Sicuro. Oppure cambi '> -1' a' === -1'. –

+0

Grazie! funziona perfettamente. –

1

È possibile scrivere il proprio selettore estendendo jQuery. Prova questo

$.extend($.expr[':'], { 
    'containsi': function(elem, i, match, array) 
    { 
    return (elem.textContent || elem.innerText || '').toLowerCase() 
    .indexOf((match[3] || "").toLowerCase()) >= 0; 
    } 
}); 

Usage $(".dDimension:containsi('" + dInput + "')").css("display","block");

0

gli ultimi commenti a the jQuery documentation for contains fornisce un'implementazione 'icontains' che possono soddisfare voi.

$.expr[':'].icontains = function(obj, index, meta, stack){ 
    return (obj.textContent || obj.innerText || jQuery(obj).text() || '').toLowerCase().indexOf(meta[3].toLowerCase()) >= 0; 
}; 

// Example usage. 
$("div:icontains('John')").css("text-decoration", "underline"); 
1

Dai un'occhiata alla this example, si estendono i selettori di jQuery con un selettore-case insensitive contiene che chiama containsi, in questo modo:

$.extend($.expr[':'], { 
    'containsi': function (elem, i, match, array) { 
     return (elem.textContent || elem.innerText || '').toLowerCase().indexOf((match[3] || '').toLowerCase()) >= 0; 
    } 
}); 
+0

Questo è praticamente lo stesso di quello che [ShankarSangoli ha pubblicato] (http://stackoverflow.com/a/8795791/218196). –

+0

@FelixKling Sì, sembra essere esattamente la stessa cosa. Senza la ref all'autore originale però :) –

Problemi correlati