In modernen Browsern verwendet jQuery document.querySelectorAll()
, um die Leistung zu verbessern, wenn gültige CSS-Selektoren verwendet werden. Es fällt auf Sizzle zurück, wenn ein Browser den Selektor oder die document.querySelectorAll()
Methode nicht unterstützt.Kann ich erzwingen, dass jQuery Sizzle zum Auswerten eines Selektors verwendet, ohne nicht standardmäßige Selektoren zu verwenden?
Allerdings möchte ich immer Sizzle anstelle der nativen Implementierung beim Debuggen eines benutzerdefinierten Selektors verwenden. Nämlich, ich versuche, eine Implementierung von :nth-last-child()
, one of the CSS3 selectors that are not supported by jQuery zu kommen. Da dieser Selektor nativ von modernen Browsern unterstützt wird, funktioniert er wie in der verknüpften Frage beschrieben. Es ist genau dieses Verhalten, das das Debuggen meines benutzerdefinierten Selektors behindert, also möchte ich es vermeiden.
Ein billiger Hack, den ich verwenden kann, ist in einem Nicht-Standard-jQuery selector extension fallen, wodurch "Selektor" sozusagen "ungültig". Zum Beispiel, jeder davon aus li:nth-last-child(2)
ist visible, kann ich einfach fallen lassen, dass in, drehe diese:
$('li:nth-last-child(2)').css('color', 'red');
In diesem:
$('li:nth-last-child(2):visible').css('color', 'red');
Dies bewirkt, dass es immer von Sizzle ausgewertet werden. Außer, das erfordert, dass ich eine Annahme meiner Seitenelemente mache, die wahr sein können oder nicht. Und das mag ich wirklich nicht. Ganz zu schweigen davon, dass ich im Allgemeinen nicht standardmäßige Selektoren verwende, es sei denn, dies ist absolut notwendig.
Gibt es eine Möglichkeit die native document.querySelectorAll()
Methode in Browsern zu überspringen, die sie unterstützen und jQuery zwingen Sizzle zu verwenden, um einen Selektor anstatt zu bewerten, dass vorzugsweise nicht nicht die Verwendung von Nicht-Standard-Selektoren verwenden? Wahrscheinlich führt dies dazu, dass anstelle von $()
eine andere Methode aufgerufen wird, aber es ist viel besser als ein Selector Hack IMO.
Wenn es zum Debuggen ist, könnten Sie versuchen, die Funktion document.querySelectorAll() zu überschreiben oder zu löschen. – jholloman
+1 für den Versuch dies. Genial :) – Spudley
Ich habe es nicht versucht: https://github.com/cowboy/jquery-misc/blob/master/jquery.ba-nth-last-child.js – thirtydot