Ich sehe jQueryXXX="YY" -Attribute, die zu einigen meiner DOM-Elemente hinzugefügt wurden

8

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?

    
Zhami 26.07.2010, 16:08
quelle

1 Antwort

9

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:

%Vor%

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:)

    
Nick Craver 26.07.2010, 16:16
quelle

Tags und Links