Comment rendre jQuery insensible à la casse, y compris jQuery 1.8+?

J’essaie d’utiliser “contient” la case insensiblement. J’ai essayé d’utiliser la solution à la question suivante stackoverflow, mais cela n’a pas fonctionné:

Existe-t-il un jQuery insensible à la casse: contient le sélecteur?

Pour plus de commodité, la solution est copiée ici:

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

Voici l’erreur:

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

Voici où je l’utilise:

  $('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"); } }); 

Mon utilisation de la casse originale “contient” dans le même scénario fonctionne sans erreur. Quelqu’un a-t-il une idée? J’apprécierais.

C’est ce que j’utilise dans un projet en cours, je n’ai eu aucun problème. Voyez si vous avez plus de chance avec ce format:

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

Dans jQuery 1.8, l’API pour cela a changé, la version jQuery 1.8+ de ceci serait:

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

Vous pouvez le tester ici . Pour plus de détails sur plus de 1.8 sélecteurs personnalisés, consultez le wiki Sizzle ici .

Il convient de noter que la réponse est correcte mais ne couvre que :Contains , et non l’alias :contains qui pourrait conduire à un comportement inattendu (ou pourrait être utilisé par conception pour des applications avancées nécessitant des recherches sensibles et insensibles).

Cela pourrait être résolu en dupliquant l’extension pour l’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; }; 

Il m’a fallu du temps pour comprendre pourquoi cela ne fonctionnait pas pour moi.

Je ferais quelque chose comme ça

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

Et partez :contains seul …

DEMO

Alors pourquoi jQuery ne le supporte pas dans sa bibliothèque?! si c’est si facile …

parce que votre code passe le code de la dinde?

Peut-être en retard … mais

Je préfère aller dans ce sens ..

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

De cette façon, vous ne falsifiez pas les NATIFS ‘.contains’ de jQuery … Vous aurez peut-être besoin de ceux par défaut plus tard … si vous les altérez , vous pourriez vous retrouver à stackOverFlow

Je vais me permettre d’append mes amis:

 $.expr[":"].containsNoCase = function (el, i, m) { var search = m[3]; if (!search) return false; return eval("/" + search + "/i").test($(el).text()); }; 

J’étais juste capable d’ignorer complètement la sensibilité à la casse de jQuery pour obtenir ce que je voulais en utilisant le code ci-dessous:

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

Vous pouvez utiliser ce lien pour trouver du code basé sur vos versions jQuery pour ignorer la sensibilité à la casse, https://css-sortingcks.com/snippets/jquery/make-jquery-contains-case-insensitive/

Aussi, si vous voulez utiliser: contient et faites des recherches, vous pouvez jeter un oeil à ceci: http://technarco.com/jquery/using-jquery-search-html-text-and-show-or-hide- en conséquence