J'essaie d'utiliser la casse "contient" de manière insensible. J'ai essayé d'utiliser la solution à la question de stackoverflow suivante, mais cela n'a pas fonctionné:
Existe-t-il une jQuery insensible à la casse: contient un 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 d'origine "contient" dans le même scénario fonctionne sans aucune 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 les sélecteurs personnalisés 1.8+, 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 la conception pour des applications avancées qui nécessitent une recherche sensible et insensible).
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;
};
Cela m'a pris un certain 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 part :contains
Seul...
Alors pourquoi jQuery ne le supporte pas dans sa bibliothèque?! si c'est aussi simple que ça ...
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 PAS falsifier le NATIVE de jQuery '. Contient' ... Vous aurez peut-être besoin de celui par défaut plus tard. ..si vous avez trafiqué, vous pourriez vous retrouver dans stackOverFlow ...
je vais me permettre d'ajouter mes amis:
$.expr[":"].containsNoCase = function (el, i, m) {
var search = m[3];
if (!search) return false;
return eval("/" + search + "/i").test($(el).text());
};
J'ai juste pu ignorer complètement la sensibilité à la casse de jQuery pour atteindre ce que je veux 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 de jQuery pour ignorer la casse, https://css-tricks.com/snippets/jquery/make-jquery-contains-case-insensitive/
De plus, si vous souhaitez utiliser: contient et effectuez une recherche, vous pouvez y jeter un œil: http://technarco.com/jquery/using-jquery-search-html-text-and-show- ou-cacher-en conséquence