¿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.
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í.
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í.
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...
Entonces, ¿por qué jQuery no lo soporta en su biblioteca?! si es tan fácil...
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...
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());
};
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
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