javascript - Gibt es eine Groß-und Kleinschreibung jQuery: Enthält Selektor?




5 Answers

Um es optional Groß-und Kleinschreibung zu http://bugs.jquery.com/ticket/278 : http://bugs.jquery.com/ticket/278

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

dann benutze :containsi statt :contains

javascript jquery jquery-selectors

Gibt es eine case insensitive Version des :contains jQuery-Selektor oder soll ich die Arbeit manuell tun, indem ich alle Elemente durchlaufen und ihre .text () mit meiner Zeichenfolge vergleichen?




Wenn jemand (wie ich) interessiert ist, was a und m [3] in Definition von Contains bedeuten.

KEY / LEGEND: Params, die von jQuery zur Verwendung in den Selektor-Definitionen zur Verfügung gestellt werden:

r = jQuery Array von Elementen wird geprüft. (zB: r.length = Anzahl der Elemente)

i = Index des aktuell untersuchten Elementes innerhalb des Arrays r .

a = Element, das derzeit geprüft wird. Die Selector-Anweisung muss true zurückgeben, um sie in die übereinstimmenden Ergebnisse aufzunehmen.

m [2] = KnotenName oder * nach dem wir suchen (links vom Doppelpunkt).

m [3] = param wurde in den: selector (param) übergeben. In der Regel eine Indexnummer wie in : nth-of-type (5) oder eine Zeichenfolge wie in : color (blue) .




Eine Variante, die etwas schneller zu sein scheint und die auch reguläre Ausdrücke erlaubt, ist:

jQuery.extend (
    jQuery.expr[':'].containsCI = function (a, i, m) {
        //-- faster than jQuery(a).text()
        var sText   = (a.textContent || a.innerText || "");     
        var zRegExp = new RegExp (m[3], 'i');
        return zRegExp.test (sText);
    }
);


Dies ist nicht nur die Groß- / Kleinschreibung, sondern ermöglicht auch leistungsstarke Suchanfragen wie:

  • $("p:containsCI('\\bup\\b')") ( $("p:containsCI('\\bup\\b')") "Up" oder "Up", aber nicht "Upper", "Wakeup", etc.)
  • $("p:containsCI('(?:Red|Blue) state')") (Entspricht "Rot-Zustand" oder "Blau-Zustand", aber nicht "Up-Zustand", etc.)
  • $("p:containsCI('^\\s*Stocks?')") (Entspricht "stock" oder "stocks", aber nur am Anfang des Absatzes (wobei führende Leerzeichen ignoriert werden).)



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

Der Update-Code funktioniert gut in 1.3, aber "enthält" sollte Kleinbuchstaben auf den ersten Buchstaben im Gegensatz zum vorherigen Beispiel sein.




Ich hatte ein ähnliches Problem mit dem folgenden nicht funktioniert ...

// This doesn't catch flac or Flac
$('div.story span.Quality:not(:contains("FLAC"))').css("background-color", 'yellow');

Dies funktioniert und ohne die Notwendigkeit einer Erweiterung

$('div.story span.Quality:not([data*="flac"])').css("background-color", 'yellow');

Das funktioniert auch, fällt aber wahrscheinlich in die Kategorie "manuell looping" ....

$('div.story span.Quality').contents().filter(function()
{
  return !/flac/i.test(this.nodeValue);
}).parent().css("background-color", 'yellow');



Related