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.

Author: Community, 2010-02-04

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.

 126
Author: Nick Craver,
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.
 43
Author: Ellipsis,
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...

DEMO

Więc dlaczego jQuery nie obsługuje go w swojej bibliotece?! jeśli to takie proste...

Ponieważ Czy twój kod przechodzi kod indyka?

 26
Author: Mina Gabriel,
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...

 5
Author: ErickBest,
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()); 
}; 
 0
Author: bresleveloper,
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

 0
Author: Umesh Patil,
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