wake-up-neo.com

Wie mache ich jQuery Contains unabhängig von Groß- und Kleinschreibung, einschließlich jQuery 1.8+?

Ich versuche, "enthält" Groß-/Kleinschreibung unempfindlich zu verwenden. Ich habe versucht, die Lösung bei der folgenden Stapelüberlauf-Frage zu verwenden, aber es hat nicht funktioniert:

Gibt es eine jQuery, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird: enthält Selektor?

Der Einfachheit halber wird die Lösung hier kopiert:

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

Hier ist der Fehler:

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

Hier verwende ich es:

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

Meine Verwendung der ursprünglichen Groß-/Kleinschreibung "enthält" im selben Szenario funktioniert ohne Fehler. Hat jemand irgendwelche Ideen? Ich würde es begrüßen.

91
Matrym

Dies ist, was ich in einem aktuellen Projekt verwende, hatte keine Probleme. Sehen Sie, ob Sie mit diesem Format mehr Glück haben:

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

In jQuery 1.8 hat sich die API dafür geändert. Die jQuery 1.8+ -Version davon wäre:

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

Sie können es hier ausprobieren . Für mehr Details zu 1.8+ benutzerdefinierten Selektoren siehe das Sizzle-Wiki hier .

127
Nick Craver

Es ist erwähnenswert, dass die Antwort korrekt ist, aber nur :Contains und nicht der Alias ​​:contains, was zu unerwartetem Verhalten führen kann (oder vom Design für erweiterte Anwendungen verwendet werden kann, die sowohl eine vertrauliche als auch eine nicht vertrauliche Suche erfordern).

Dies könnte durch Duplizieren der Erweiterung für den Alias ​​behoben werden:

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; 
};

Ich habe eine Weile gebraucht, um herauszufinden, warum es bei mir nicht funktioniert hat.

43
Ellipsis

Ich würde so etwas machen

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

Und lass :contains Alleine ...

DEMO

Warum unterstützt jQuery es nicht in seiner Bibliothek ?! wenn es so einfach ist ...

weil Passiert Ihr Code den Truthahncode?

27
Mina Gabriel

Kann spät sein .... aber,

Ich würde es vorziehen, diesen Weg zu gehen ..

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

Auf diese Weise NICHT manipulieren Sie jQueries NATIVE '. Enthält' ... Möglicherweise benötigen Sie die Standardeinstellung später. ..wenn manipuliert, finden Sie sich möglicherweise zurück zu stackOverFlow ...

5
ErickBest

ich erlaube mir, meine Freunde hinzuzufügen:

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

Ich konnte die Groß- und Kleinschreibung von jQuery einfach ignorieren, um das zu erreichen, was ich mit folgendem Code erreichen möchte:

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

Sie können diesen Link verwenden, um Code basierend auf Ihren jQuery-Versionen zu finden und die Groß- und Kleinschreibung zu ignorieren. https://css-tricks.com/snippets/jquery/make-jquery-contains-case-insensitive/

Auch wenn Sie Folgendes verwenden möchten: enthält und etwas suchen möchten, schauen Sie sich dies an: http://technarco.com/jquery/using-jquery-search-html-text-and-show- oder-verstecke-entsprechend

0
Umesh Patil