2012-01-09 26 views
8

Estoy tratando de comparar una cadena dada en una entrada al contenido de un div usando jQuery contain.Uso de jQuery de contains y toLowerCase()

El problema es que quiero poder verificar si la cadena está contenida independientemente de mayúsculas/minúsculas.

Esta es mi función:

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

Así que si uno de los divs .dDimension contiene 'Fecha' y un usuario pulsa la tecla 'D', quiero mostrar ese elemento.

¿es posible?

+1

posible duplicado de [¿Hay un caso insensible jQuery: contiene selector?] (http://stackoverflow.com/questions/187537/is-there-a-case-insensitive-jquery-contains-selector) –

Respuesta

18

Puede utilizar .filter[docs]:

var dInput = this.value.toLowerCase(); 

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

¿Puedo usar la función '' not'' para verificar lo contrario? –

+0

Claro. O puede cambiar '> -1' a' === -1'. –

+0

¡Gracias! trabajando perfectamente –

1

Usted puede escribir su propio selector mediante la extensión de jQuery. Prueba este

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

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

0

Los últimos comentarios en the jQuery documentation for contains proporciona una implementación '' icontains que pueden adaptarse a usted.

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

Tenga una mirada en this example, que extender los selectores de jQuery con un selector de mayúsculas y minúsculas contiene que llama containsi, así:

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

Eso es más o menos lo mismo [publicado por ShankarSangoli] (http://stackoverflow.com/a/8795791/218196). –

+0

@FelixKling Sí, eso parece ser exactamente lo mismo. Sin la referencia al autor original :) –

Cuestiones relacionadas