Syntax
- Abkürzung für das Ready-Event von Roosteronacid
- Zeilenumbrüche und Verkettbarkeit durch Hahnsäure
- Nesting Filter von Nathan Long
- Zwischenspeichern Sie eine Sammlung und führen Sie Befehle in derselben Zeile von roosteronacid aus
- Enthält Selektor von Roosteronacid
- Definieren von Eigenschaften bei der Elementerstellung durch Roosteronsäure
- Der Zugriff auf jQuery funktioniert wie ein Array von roosteronacid
- Die noConflict-Funktion - Freigabe der $ -Variablen durch Oli
- Isolieren Sie die Variable $ im noConflict-Modus mit nickf
- No- Conflict -Modus von Roosteronacid
Datenspeicher
- Die Datenfunktion - Daten von TenebrousX an Elemente binden
- Unterstützung für HTML5-Datenattribute bei Steroiden! durch Hahnsäure
- Das jQuery-Metadaten-Plug-In von Filip Dupanović
Optimierung
- Optimieren Sie die Leistung komplexer Selektoren durch Roosteronsäure
- Der Kontextparameter von lupefiasco
- Speichern und Wiederverwenden von Suchanfragen von Nathan Long
- Erstellen eines HTML-Elements und Beibehalten einer Referenz, Überprüfen, ob ein Element vorhanden ist, Schreiben Ihrer eigenen Selektoren von Andreas Grech
Sonstiges
- Überprüfen Sie den Index eines Elements in einer Sammlung mit redsquare
- Live Event Handler von TM
- Ersetzen Sie anonyme Funktionen durch benannte Funktionen durch Ken
- Microsoft AJAX Framework und jQuery Bridge von Slace
- jQuery-Tutorials von egyamado
- Entfernen Sie Elemente aus einer Sammlung und bewahren Sie die Verkettbarkeit durch Roosteronsäure
- Deklarieren Sie $ this zu Beginn anonymer Funktionen von Ben
- FireBug Lite, Hotbox-Plug-In, zeigt an, wann ein Bild geladen wurde, und Google CDN von Color Blend
- Vernünftige Verwendung von jQuery-Skripten von Drittanbietern durch harriyott
- Die jede Funktion von Jan Zich
- Formularerweiterungs-Plug-In von Chris S.
- Asynchrone Funktion von OneNerd
- Das jQuery-Vorlagen-Plug-In: Implementierung komplexer Logik mithilfe von Renderfunktionen von roosteronacid
javascript
jquery
Roosteronsäure
quelle
quelle
if ((var someDiv = $("#someDiv")).length) { /* do stuff with someDiv... */ }
someDiv
möchte, in derif
Anweisung enthalten zu sein, weil dies nicht der Fall ist. JavaScript unterstützt nur FunktionsumfangDie
data()
Methode von jQuery ist nützlich und nicht bekannt. Sie können Daten an DOM-Elemente binden, ohne das DOM zu ändern.quelle
Verschachtelungsfilter
Sie können Filter verschachteln (wie hier gezeigt ).
quelle
Ich bin wirklich kein Fan der
$(document).ready(fn)
Abkürzung. Sicher, es verringert den Code, aber es verringert auch die Lesbarkeit des Codes erheblich. Wenn Sie sehen$(document).ready(...)
, wissen Sie, was Sie sehen.$(...)
wird auf viel zu viele andere Arten verwendet, um sofort einen Sinn zu ergeben.Wenn Sie mehrere Frameworks haben, können Sie diese
jQuery.noConflict();
wie gesagt verwenden, aber Sie können auch eine andere Variable dafür zuweisen:Sehr nützlich, wenn Sie mehrere Frameworks haben, die auf
$x(...)
Aufrufe im Stil reduziert werden können.quelle
Ooooh, vergessen wir nicht die jQuery-Metadaten ! Die data () - Funktion ist großartig, muss aber über jQuery-Aufrufe aufgefüllt werden.
Anstatt die W3C-Konformität mit benutzerdefinierten Elementattributen wie:
Verwenden Sie stattdessen Metadaten:
quelle
data-*
Attribute sind automatisch über Aufrufe an.data()
Live-Event-Handler
Legen Sie einen Ereignishandler für jedes Element fest, das einem Selektor entspricht, auch wenn es nach dem ersten Laden der Seite zum DOM hinzugefügt wird:
Auf diese Weise können Sie Inhalte über Ajax laden oder über Javascript hinzufügen und die Ereignishandler automatisch für diese Elemente einrichten.
Um die Live-Ereignisbehandlung zu stoppen:
Diese Live-Event-Handler haben im Vergleich zu regulären Events einige Einschränkungen, funktionieren jedoch in den meisten Fällen hervorragend.
Weitere Informationen finden Sie in der jQuery-Dokumentation .
UPDATE:
live()
unddie()
sind in jQuery 1.7 veraltet. Ähnliche Ersatzfunktionen finden Sie unter http://api.jquery.com/on/ und http://api.jquery.com/off/ .UPDATE2:
live()
wurde schon vor jQuery 1.7 lange veraltet. Für Versionen jQuery 1.4.2+ vor 1.7 verwenden Siedelegate()
undundelegate()
. Daslive()
Beispiel ($('button.someClass').live('click', someFunction);
) kann folgendermaßen umgeschrieben werdendelegate()
:$(document).delegate('button.someClass', 'click', someFunction);
.quelle
Ersetzen Sie anonyme Funktionen durch benannte Funktionen. Dies ersetzt wirklich den jQuery-Kontext, aber es kommt eher ins Spiel, als wenn man jQuery verwendet, da es auf Rückruffunktionen angewiesen ist. Die Probleme, die ich mit anonymen Inline-Funktionen habe, sind, dass sie schwieriger zu debuggen sind (viel einfacher, einen Callstack mit eindeutig benannten Funktionen zu betrachten, statt 6 Ebenen von "anonym") und auch die Tatsache, dass mehrere anonyme Funktionen innerhalb derselben vorhanden sind Die jQuery-Kette kann unhandlich zum Lesen und / oder Verwalten werden. Darüber hinaus werden anonyme Funktionen normalerweise nicht wiederverwendet. Andererseits ermutigt mich das Deklarieren benannter Funktionen, Code zu schreiben, der mit größerer Wahrscheinlichkeit wiederverwendet wird.
Eine Illustration; anstatt:
Ich bevorzuge:
quelle
this
, können Sie leider kein "richtiges" OO erhalten, ohne Gehäuse zu verwenden. Ich gehe normalerweise einen Kompromiss ein:$('div').click( function(e) { return self.onClick(e) } );
Eigenschaften bei der Elementerstellung definieren
In jQuery 1.4 können Sie ein Objektliteral verwenden, um Eigenschaften beim Erstellen eines Elements zu definieren:
... Sie können sogar Stile hinzufügen:
Hier ist ein Link zur Dokumentation .
quelle
Anstatt einen anderen Alias für das jQuery-Objekt zu verwenden (wenn noConflict verwendet wird), schreibe ich meinen jQuery-Code immer, indem ich alles in einen Abschluss einbinde. Dies kann in der Funktion document.ready erfolgen:
Alternativ können Sie dies folgendermaßen tun:
Ich finde das am tragbarsten. Ich habe an einer Site gearbeitet, die sowohl Prototype als auch jQuery gleichzeitig verwendet, und diese Techniken haben alle Konflikte vermieden.
quelle
instanceOf
wird nicht funktionieren, nurinstanceof
. Und es wird sowieso nicht funktionieren, weiljQuery instanceof jQuery
es zurückkehren wirdfalse
.$ == jQuery
ist der richtige Weg, es zu tun.Überprüfen Sie den Index
jQuery hat .index, aber es ist schwierig, es zu verwenden, da Sie die Liste der Elemente benötigen und das Element übergeben, dessen Index Sie möchten:
Folgendes ist viel einfacher:
Wenn Sie den Index eines Elements innerhalb einer Menge (z. B. Listenelemente) innerhalb einer ungeordneten Liste kennen möchten:
quelle
index()
den Index einfach verwenden und von seinem übergeordneten Index abrufen können.Abkürzung für das Ready-Event
Der explizite und ausführliche Weg:
Die Abkürzung:
quelle
Geben Sie in der Kernfunktion jQuery zusätzlich zum Auswahlparameter den Kontextparameter an. Durch Angabe des Kontextparameters kann jQuery von einem tieferen Zweig im DOM anstatt vom DOM-Stamm aus beginnen. Bei einem ausreichend großen DOM sollte die Angabe des Kontextparameters zu Leistungssteigerungen führen.
Beispiel: Findet alle Eingänge vom Typ Radio im ersten Formular des Dokuments.
Referenz: http://docs.jquery.com/Core/jQuery#expressioncontext
quelle
$(document.forms[0]).find('input:radio')
macht das Gleiche. Wenn Sie sich die jQuery-Quelle ansehen, werden Sie sehen: Wenn Sie einen zweiten Parameter an übergeben$
, wird dieser tatsächlich aufgerufen.find()
.$('form:first input:radio')
?Nicht wirklich nur jQuery, aber ich habe eine schöne kleine Brücke für jQuery und MS AJAX gemacht:
Es ist wirklich schön, wenn Sie viel ASP.NET AJAX ausführen, da jQuery von MS unterstützt wird und jetzt eine schöne Brücke hat, was bedeutet, dass es wirklich einfach ist, jQuery-Operationen durchzuführen:
Das obige Beispiel ist also nicht besonders gut, aber wenn Sie ASP.NET AJAX-Serversteuerelemente schreiben, ist es einfach, jQuery in Ihrer clientseitigen Steuerelementimplementierung zu haben.
quelle
Optimieren Sie die Leistung komplexer Selektoren
Das Abfragen einer Teilmenge des DOM bei Verwendung komplexer Selektoren verbessert die Leistung drastisch:
quelle
Apropos Tipps und Tricks und einige Tutorials. Ich habe diese Reihe von Tutorials ( "jQuery for Absolute Beginners" -Videoserie) von Jeffery Way gefunden -Videoserie SEHR HILFREICH.
Es richtet sich an Entwickler, die neu in jQuery sind. Er zeigt, wie man mit jQuery viele coole Sachen erstellt, wie Animation, Erstellen und Entfernen von Elementen und mehr ...
Ich habe viel daraus gelernt. Er zeigt, wie einfach es ist, jQuery zu verwenden. Jetzt liebe ich es und kann jedes jQuery-Skript lesen und verstehen, auch wenn es komplex ist.
Hier ist ein Beispiel, das mir gefällt: " Ändern der Textgröße “
1- jQuery ...
2- CSS-Styling ...
2- HTML ...
Ich kann diese Tutorials nur empfehlen ...
http://blog.themeforest.net/screencasts/jquery-for-absolute-beginners-video-series/
quelle
Asynchrone Funktion von each ()
Wenn Sie wirklich komplexe Dokumente haben, in denen die Funktion jquery each () ausgeführt wird, sperrt der Browser während der Iteration und / oder Internet Explorer zeigt die Meldung "Möchten Sie dieses Skript weiter ausführen? " Auf. Diese Lösung spart den Tag.
Die erste Möglichkeit, es zu verwenden, ist wie bei jedem ():
Mit einem optionalen zweiten Parameter können Sie die Geschwindigkeit / Verzögerung zwischen den Iterationen angeben, die für Animationen nützlich sein kann ( das folgende Beispiel wartet zwischen den Iterationen 1 Sekunde ):
Denken Sie daran, dass Sie sich nicht darauf verlassen können, dass die Iterationen vor der nächsten Codezeile abgeschlossen sind, da dies asynchron funktioniert. Beispiel:
Ich habe dies für ein internes Projekt geschrieben, und obwohl ich sicher bin, dass es verbessert werden kann, hat es für das funktioniert, was wir brauchten. Hoffen Sie also, dass einige von Ihnen es nützlich finden. Vielen Dank -
quelle
Syntaktische Kurzschrift-Zucker-Sache - Zwischenspeichern einer Objektsammlung und Ausführen von Befehlen in einer Zeile:
Anstatt:
Ich mache:
Ein etwas "realer" Anwendungsfall könnte in diese Richtung gehen:
quelle
$(this).siblings().removeClass("hover")
. Ich weiß, das klingt so klein, aber jedes Mal, wenn Sie das DOM ändern, wird möglicherweise ein erneutes Zeichnen des Browsers ausgelöst. Andere Möglichkeiten sind Ereignisse, die an DOMAttrModified angehängt sind, oder die Klassen, die die Höhe des Elements ändern und andere Ereignis-Listener mit "Größenänderung" auslösen können.cache.not(this).removeClass("hover")
Ich mag es, eine
$this
Variable am Anfang anonymer Funktionen zu deklarieren , damit ich weiß, dass ich auf eine jQueried verweisen kann.Wie so:
quelle
Speichern Sie jQuery-Objekte in Variablen zur Wiederverwendung
Wenn Sie ein jQuery-Objekt in einer Variablen speichern, können Sie es wiederverwenden, ohne das DOM durchsuchen zu müssen, um es zu finden.
(Wie von @Louis vorgeschlagen, verwende ich jetzt $, um anzugeben, dass eine Variable ein jQuery-Objekt enthält.)
Angenommen, Sie haben eine Liste mit Lebensmitteln in einem Geschäft und möchten nur diejenigen anzeigen, die den Kriterien eines Benutzers entsprechen. Sie haben ein Formular mit Kontrollkästchen, die jeweils ein Kriterium enthalten. Die Kontrollkästchen haben Namen wie
organic
undlowfat
und die Produkte haben entsprechende Klassen -.organic
usw.Jetzt können Sie mit diesem jQuery-Objekt weiterarbeiten. Beginnen Sie jedes Mal, wenn ein Kontrollkästchen angeklickt wird (zum Aktivieren oder Deaktivieren), mit der Hauptliste der Lebensmittel und filtern Sie anhand der aktivierten Kontrollkästchen nach unten:
quelle
$
vorne zu haben . zBvar $allItems = ...
$
dass dies darauf hinweist, dass es sich um ein jQuery-Objekt handelt, was die visuelle Unterscheidung von anderen Variablen erleichtern würde.Es scheint, dass die meisten interessanten und wichtigen Tipps bereits erwähnt wurden, daher ist dies nur eine kleine Ergänzung.
Der kleine Tipp ist die Funktion jQuery.each (Objekt, Rückruf) . Jeder benutzt wahrscheinlich die jQuery.each (Rückruf) Funktion , um über das jQuery-Objekt selbst zu iterieren, da dies natürlich ist. Die Dienstprogrammfunktion jQuery.each (Objekt, Rückruf) iteriert über Objekte und Arrays. Lange Zeit habe ich irgendwie nicht gesehen, wofür es sein könnte, abgesehen von einer anderen Syntax (es macht mir nichts aus, alle modischen Loops zu schreiben), und ich schäme mich ein bisschen, dass ich erst kürzlich seine Hauptstärke erkannt habe.
Da der Hauptteil der Schleife in jQuery.each (Objekt, Rückruf) eine Funktion ist , erhalten Sie jedes Mal in der Schleife einen neuen Bereich, was besonders praktisch ist, wenn Sie Abschlüsse in der Schleife erstellen .
Mit anderen Worten, ein typischer häufiger Fehler besteht darin, Folgendes zu tun:
Wenn Sie nun die Funktionen im
functions
Array aufrufen , erhalten Sie dreimal eine Warnung mit dem Inhaltundefined
, der höchstwahrscheinlich nicht Ihren Wünschen entspricht. Das Problem ist, dass es nur eine Variablei
gibt und alle drei Verschlüsse darauf verweisen. Wenn die Schleife beendet ist, ist der Endwert voni
3 undsomeArrary[3]
istundefined
. Sie können dies umgehen, indem Sie eine andere Funktion aufrufen, die den Abschluss für Sie erstellt. Oder Sie verwenden das Dienstprogramm jQuery, das es im Grunde für Sie erledigt:Wenn Sie nun die Funktionen aufrufen, erhalten Sie erwartungsgemäß drei Warnungen mit den Inhalten 1, 2 und 3.
Im Allgemeinen ist es nichts, was Sie nicht selbst tun könnten, aber es ist schön zu haben.
quelle
Der Zugriff auf jQuery funktioniert wie ein Array
Hinzufügen / Entfernen einer Klasse basierend auf einem Booleschen ...
Ist die kürzere Version von ...
Nicht so viele Anwendungsfälle dafür. Dennoch; Ich finde es ordentlich :)
Aktualisieren
Nur für den Fall, dass Sie kein Typ zum Lesen von Kommentaren sind, weist ThiefMaster darauf hin, dass die toggleClass einen booleschen Wert akzeptiert , der bestimmt, ob eine Klasse hinzugefügt oder entfernt werden soll. Was meinen obigen Beispielcode angeht, wäre dies der beste Ansatz ...
quelle
$('selector').toggleClass('name_of_the_class', b);
.Aktualisieren:
Fügen Sie einfach dieses Skript in die Site ein und Sie erhalten eine Firebug-Konsole, die zum Debuggen in einem beliebigen Browser angezeigt wird. Nicht ganz so voll ausgestattet, aber trotzdem ziemlich hilfreich! Denken Sie daran, es zu entfernen, wenn Sie fertig sind.
Schauen Sie sich diesen Link an:
Aus CSS-Tricks
Update: Ich habe etwas Neues gefunden; Es ist die JQuery Hotbox.
JQuery Hotbox
Google hostet mehrere JavaScript-Bibliotheken in Google Code. Das Laden von dort spart Bandbreite und lädt schnell, da es bereits zwischengespeichert wurde.
Oder
Sie können dies auch verwenden, um festzustellen, wann ein Bild vollständig geladen ist.
Die "console.info" von firebug, mit der Sie Nachrichten und Variablen auf dem Bildschirm ausgeben können, ohne Warnfelder verwenden zu müssen. Mit "console.time" können Sie ganz einfach einen Timer einrichten, um eine Menge Code zu verpacken und zu sehen, wie lange es dauert.
quelle
Verwenden Sie nach Möglichkeit Filtermethoden über Pseudo-Selektoren, damit jQuery querySelectorAll verwenden kann (was viel schneller als sizzle ist). Betrachten Sie diesen Selektor:
Die gleiche Auswahl kann getroffen werden mit:
Das muss schneller gehen, da die anfängliche Auswahl von '.class' QSA-kompatibel ist
quelle
Entfernen Sie Elemente aus einer Sammlung und bewahren Sie die Verkettbarkeit
Folgendes berücksichtigen:
Die
filter()
Funktion entfernt Elemente aus dem jQuery-Objekt. In diesem Fall: Alle Li-Elemente, die nicht den Text "Eins" oder "Zwei" enthalten, werden entfernt.quelle
Ändern des Typs eines Eingabeelements
Ich bin auf dieses Problem gestoßen, als ich versucht habe, den Typ eines Eingabeelements zu ändern, das bereits an das DOM angehängt ist. Sie müssen das vorhandene Element klonen, es vor dem alten Element einfügen und dann das alte Element löschen. Sonst funktioniert es nicht:
quelle
Umsichtige Verwendung von jQuery-Skripten von Drittanbietern, z. B. Formularfeldvalidierung oder URL-Analyse. Es lohnt sich zu sehen, worum es geht, damit Sie wissen, wann Sie das nächste Mal auf eine JavaScript-Anforderung stoßen.
quelle
Zeilenumbrüche und Verkettbarkeit
Bei der Verkettung mehrerer Aufrufe von Sammlungen ...
Sie können die Lesbarkeit mit Zeilenumbrüchen verbessern. So was:
quelle
Verwenden Sie beim Auslösen einer Animation .stop (true, true), um zu verhindern, dass die Animation wiederholt wird. Dies ist besonders hilfreich für Rollover-Animationen.
quelle
Verwenden selbstausführender anonymer Funktionen in einem Methodenaufruf wie z
.append()
, um etwas zu durchlaufen. IE:Ich benutze dies, um Dinge zu durchlaufen, die groß und unangenehm wären, um aus meiner Verkettung auszubrechen und zu bauen.
quelle
Unterstützung für HTML5-Datenattribute bei Steroiden!
Das Datenfunktion wurde bereits erwähnt. Damit können Sie Daten mit DOM-Elementen verknüpfen.
Kürzlich hat das jQuery-Team Unterstützung für hinzugefügt benutzerdefinierte HTML5-Datenattribute * . Und als ob das nicht genug wäre; Sie haben die Datenfunktion mit Steroiden zwangsernährt, was bedeutet, dass Sie komplexe Objekte in Form von JSON direkt in Ihrem Markup speichern können.
Der HTML:
Das JavaScript:
quelle