Jak sprawić, by jQuery nie rozróżniał wielkości liter, w tym jQuery 1.8+?
Staram się używać" contains " case niewrażliwie. Próbowałem użyć rozwiązania w następującym pytaniu stackoverflow, ale nie zadziałało:
Czy selektor jQuery: contains jest niewrażliwy na wielkość liter?
dla wygody, rozwiązanie jest skopiowane tutaj:
jQuery.extend(
jQuery.expr[':'], {
Contains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0"
});
Oto błąd:
Error: q is not a function
Source File: /js/jquery-1.4.js?ver=1.4
Line: 81
Tutaj go używam:
$('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");
}
});
Moje użycie oryginalnego rozróżniania wielkości liter "zawiera" w tym samym scenariuszu działa bez wszelkie błędy. Czy ktoś ma jakieś pomysły? Byłbym wdzięczny.
6 answers
Tego używam w obecnym projekcie, nie miałem żadnych problemów. Sprawdź, czy masz więcej szczęścia z tym formatem:
jQuery.expr[':'].Contains = function(a, i, m) {
return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
};
W jQuery 1.8 API dla tego się zmieniło, wersja jQuery 1.8+ tego będzie:
jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {
return function( elem ) {
return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
Możesz go przetestować tutaj . Aby uzyskać więcej informacji na temat selektorów 1.8+, sprawdź Sizzle wiki tutaj.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-10 12:40:54
Warto zauważyć, że odpowiedź jest poprawna, ale obejmuje tylko :Contains
, a nie alias :contains
, który może prowadzić do nieoczekiwanego zachowania(lub może być używany przez projektowanie dla zaawansowanych aplikacji, które wymagają zarówno wrażliwego, jak i niewrażliwego wyszukiwania).
Można to rozwiązać, powielając rozszerzenie dla aliasu:
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;
};
Trochę mi zajęło zastanowienie się, dlaczego to nie działa na mnie.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-27 04:31:48
Zrobiłbym coś takiego
$.expr[':'].containsIgnoreCase = function (n, i, m) {
return jQuery(n).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
};
I Zostaw :contains
W Spokoju...
Więc dlaczego jQuery nie obsługuje go w swojej bibliotece?! jeśli to takie proste...
Ponieważ Czy twój kod przechodzi kod indyka?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-23 12:13:18
Może się spóźnić.... ale,
Wolałbym iść tędy..$.extend($.expr[":"], {
"MyCaseInsensitiveContains": function(elem, i, match, array) {
return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
W ten sposób, NIE majstrować z natywnym jQuery '.zawiera"... Możesz potrzebować domyślnego później...jeśli majstrowałeś, możesz wrócić do stackOverFlow...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-27 16:16:17
Pozwolę sobie dodać znajomych:
$.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/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-11 08:38:51
Byłem w stanie całkowicie zignorować czułość liter jQuery, aby osiągnąć to, co chcę, używając poniższego kodu:
$.expr[":"].contains = $.expr.createPseudo(function(arg) {
return function( elem ) {
return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
Możesz użyć tego linku, aby znaleźć kod oparty na wersjach jQuery, aby zignorować wrażliwość na wielkość liter, https://css-tricks.com/snippets/jquery/make-jquery-contains-case-insensitive/
Również jeśli chcesz użyć :contains i dokonać wyszukiwania, możesz rzucić okiem na to: 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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-15 09:42:16