Próbuję użyć „zawiera” bez rozróżniania wielkości liter. Próbowałem użyć rozwiązania przy następującym pytaniu o przepełnienie stosu, ale nie zadziałało:
Czy istnieje jQuery: zawiera selektor niewrażliwy na wielkość liter?
Dla wygody rozwiązanie zostało 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
Oto, gdzie 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 słowa „zawiera” z rozróżnianiem wielkości liter w tym samym scenariuszu działa bez żadnych błędów. Czy ktoś ma jakieś pomysły? Byłbym wdzięczny.
:containsExact
,:containsExactCase
i:containsRegex
selektorów do teraz działać we wszystkich wersjach jQuery.Odpowiedzi:
To jest to, czego używam w bieżącym 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 zmieniło się, wersja jQuery 1.8+ tego wyglądałaby:
jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) { return function( elem ) { return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; }; });
Możesz to przetestować tutaj . Aby uzyskać więcej informacji na temat niestandardowych selektorów 1.8+, zapoznaj się z wiki Sizzle tutaj .
źródło
icontains
lub coś podobnego.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 projekt w przypadku zaawansowanych aplikacji, które wymagają zarówno wrażliwego, jak i niewrażliwego wyszukiwania).Można to rozwiązać, powielając rozszerzenie 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; };
Zajęło mi trochę czasu, zanim zrozumiałem, dlaczego to nie działa.
źródło
:contains
. Myślę, że lepiej zostawić oryginał w:contains
spokoju i zadzwonić do nowego selektora:icontains
.Zrobiłbym coś takiego
$.expr[':'].containsIgnoreCase = function (n, i, m) { return jQuery(n).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; };
I zostaw w
:contains
spokoju ...PRÓBNY
Dlaczego więc jQuery nie obsługuje tego w swojej bibliotece ?! jeśli to takie proste ...
ponieważ Twój kod przekazuje kod indyka?
źródło
Może się spóźnić ... ale
Wolałbym iść tą drogą ...
$.extend($.expr[":"], { "MyCaseInsensitiveContains": function(elem, i, match, array) { return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0; } });
W ten sposób NIE modyfikujesz NATIVE '.contains' jQuery ... Możesz potrzebować domyślnego później ... jeśli ktoś się przy nim manipuluje , możesz wrócić do stackOverFlow ...
źródło
pozwolę sobie na dodanie moich znajomych:
$.expr[":"].containsNoCase = function (el, i, m) { var search = m[3]; if (!search) return false; return eval("/" + search + "/i").test($(el).text()); };
źródło
Po prostu mogłem całkowicie zignorować rozróżnianie wielkości liter w jQuery, aby osiągnąć to, czego 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 na podstawie wersji jQuery i zignorować rozróżnianie wielkości liter, https://css-tricks.com/snippets/jquery/make-jquery-contains-case-insensitive/
Również jeśli chcesz użyć: zawiera i przeprowadzić wyszukiwanie, możesz rzucić okiem na to: http://technarco.com/jquery/using-jquery-search-html-text-and-show-or-hide- odpowiednio
źródło