Wenn ich die IE-Entwicklerwerkzeuge verwende, haben einige der DOM-Elemente Attribute hinzugefügt, die das Formular haben jQueryXXXXXXXXX="JJ" Wobei XXXXX eine ziemlich lange Ziffernfolge und YY eine normalerweise kleine ganze Zahl ist.
Ich sehe diese nicht mit dem DOM-Inspektor auf Safari.
Warum und wann werden diese hinzugefügt? Sind die Daten für mich in irgendeiner Weise nützlich?
Dies ist das jQuery-Attribut expando , das ist ein Schlüssel für das Objekt verwendet, um seinen Eintrag in $.cache
zu finden. $.cache
wird für .data()
, Event-Handler oder alles verwendet, was Sie dort behalten möchten, es ist ein zentralisierter Ort speichert Ereignisse (macht das Abfeuern globaler Ereignisse einfacher / effizienter) und einen Ort für die Bereinigung. Wenn Sie nur das Attribut für das Element mitführen, ist es nicht notwendig, einen Datenspeicher für jedes -Element zu haben, das den Browser nicht korrekt klonen kann. Stattdessen wird nur dieser Schlüssel verwaltet, und er kann seinen Eintrag in der $.cache
Objekt an einem beliebigen Punkt.
Nehmen wir ein Beispiel:
%Vor% Dies ergibt eine "ID" oder eine Art Schlüssel, dieser Schlüssel entspricht der Eigenschaft auf der $.cache
Objekt, das die Daten / Ereignisse dieses Elements speichert ( wenn es Daten / Event-Handler hat). Wenn der Schlüssel beispielsweise "4" wäre, würde er intern verwendet werden, um auf $.cache[4]
zuzugreifen.
$.cache
enthält alle Daten, Event-Handler usw. für alle Elemente, die von jQuery zugewiesen wurden. Es wird zugewiesen, indem die $.uuid
(eine interne immer steigende ID, die jquery zuordnet) inkrementiert wird und inkrementiert jedes Mal, wenn ein neues Objekt in $.cache
hinzugefügt wird.
Ein paar zusätzliche Bits:
Die zufällige Art des Namens ist nicht beliebig, die jQueryXXXXXXXXXXXXXXXXX
ist nur jQuery
+ der Zeitstempel, dann wurde jquery geladen , um dem Attribut einen eindeutigen, hoffentlich nicht kollidierenden Namen zu geben.
Warum siehst du es nicht mit .html()
?, weil jQuery versteckt ist es , es tut ein Regex, um es auszuziehen .
Hinweis: $.expando
wird in 1.3 nicht angezeigt, nur 1.4 +.
Verwendung:
Ist es nützlich? Nun, es kann zum Beispiel sein, wenn Sie $.cache
in Ihrer Konsole analysieren, und Sie sehen, dass Sie ein Speicherleck haben (nein .empty()
vor vielen .load()
Aufrufen, wobei beispielsweise Ereignishandler zurückgelassen werden. Du öffnest deine Konsole und machst $.cache
, siehst 500 Einträge dort, sagen wir, du willst wissen, welches Objekt mit 312 gelaufen ist, dann kannst du es auswählen, wie folgt:
Als ein anderes Beispiel:
%Vor% Dies ist ein praktisches Beispiel, normalerweise muss der durchschnittliche jQuery-Benutzer nicht in $.cache
eintauchen oder wie es funktioniert, aber es ist da und verfügbar, falls Sie nie nachsehen müssen. Führen Sie einfach $.cache
in Ihrer Konsole aus, es gibt wahrscheinlich eine Fülle von Informationen über all Ihre Handler, von denen Sie nicht wussten, dass sie verfügbar waren:)
Tags und Links jquery