¿Cómo hago que jQuery Contiene mayúsculas y minúsculas, incluyendo jQuery 1.8+?


Estoy tratando de utilizar "contiene" caso minúsculas. Intenté usar la solución en la siguiente pregunta de stackoverflow, pero no funcionó:

¿Hay un selector jQuery :contains que no distingue entre mayúsculas y minúsculas?

Para mayor comodidad, la solución se copia aquí:

jQuery.extend(
        jQuery.expr[':'], { 
                Contains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0" 
});

Aquí está el error:

Error: q is not a function
Source File: /js/jquery-1.4.js?ver=1.4
Line: 81

Aquí es donde lo estoy usando:

  $('input.preset').keyup(function() {
    $(this).next().find("li").removeClass("bold");
    var theMatch = $(this).val();
    if (theMatch.length > 1){
      theMatch = "li:Contains('" + theMatch + "')";
      $(this).next().find(theMatch).addClass("bold");
    }
  });

Mi uso del original sensible a mayúsculas y minúsculas "contiene" en el mismo escenario funciona sin cualquier error. ¿Alguien tiene alguna idea? Te lo agradecería.

Author: Community, 2010-02-04

6 answers

Esto es lo que estoy usando en un proyecto actual, no he tenido ningún problema. Vea si tiene mejor suerte con este formato:

jQuery.expr[':'].Contains = function(a, i, m) { 
  return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; 
};

En jQuery 1.8 la API para esto cambió, la versión 1.8+ de jQuery sería:

jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {
    return function( elem ) {
        return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
    };
});

Puedes probarlo aquí. Para más detalles sobre 1.8+ selectores personalizados, echa un vistazo a la wiki de Sizzle aquí.

 126
Author: Nick Craver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-10 12:40:54

Vale la pena señalar que la respuesta es correcta, pero solo cubre :Contains, y no el alias :contains que podría conducir a un comportamiento inesperado (o podría ser utilizado por diseño para aplicaciones avanzadas que requieren búsqueda tanto sensible como insensible).

Esto podría resolverse duplicando la extensión del alias:

jQuery.expr[':'].Contains = function(a, i, m) { 
  return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; 
};
jQuery.expr[':'].contains = function(a, i, m) { 
  return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; 
};

Me llevó un tiempo averiguar por qué no estaba funcionando para mí.

 43
Author: Ellipsis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-27 04:31:48

Haría algo como esto

     $.expr[':'].containsIgnoreCase = function (n, i, m) {
        return jQuery(n).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
    };

Y Deja :contains En Paz...

DEMO

Entonces, ¿por qué jQuery no lo soporta en su biblioteca?! si es tan fácil...

Porque ¿Su código pasa el código de turquía?

 26
Author: Mina Gabriel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-23 12:13:18

Puede llegar tarde.... pero,

Preferiría ir por este camino..

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

De esta manera, NO alteras el NATIVO de jQuery '.contiene'... Es posible que necesite el predeterminado más adelante...si se manipula, es posible que se encuentre de nuevo a stackOverFlow...

 5
Author: ErickBest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-27 16:16:17

Me permitiré añadir a mis amigos:

$.expr[":"].containsNoCase = function (el, i, m) { 
    var search = m[3]; 
    if (!search) return false; 
    return eval("/" + search + "/i").test($(el).text()); 
}; 
 0
Author: bresleveloper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-11 08:38:51

Simplemente pude ignorar la sensibilidad de mayúsculas y minúsculas de jQuery por completo para lograr lo que quiero usando el siguiente código:

            $.expr[":"].contains = $.expr.createPseudo(function(arg) {
            return function( elem ) {
                return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
            };
        });

Puede usar este enlace para encontrar código basado en sus versiones de jQuery para ignorar la sensibilidad de mayúsculas y minúsculas, https://css-tricks.com/snippets/jquery/make-jquery-contains-case-insensitive /

También si desea utilizar: contiene y hacer alguna búsqueda, es posible que desee echar un vistazo a esto: http://technarco.com/jquery/using-jquery-search-html-text-and-show-or-hide-accordingly

 0
Author: Umesh Patil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-15 09:42:16