Unter der Haube verwendet JQuery eine Karte von "UUIDs" (nur ein Zähler, den es als jQuery.uuid
), um die bekannten Speicherleck-Probleme zu umgehen, die Browser haben, wenn Sie eine Eigenschaft an ein Tag im DOM von Javascript anhängen. Anstelle dessen verwendet JQuery die $.data(tag, name, value)
um Daten in einer Karte zu speichern, die anhand der uuid verschlüsselt ist (ein Schlüssel, der durch Überprüfung der tag[jQuery.expando]
).
Während $.data()
sehr nützlich ist, gibt es Fälle, in denen Sie Daten zu Tags zuordnen möchten, ohne diese Daten in einen globalen Bereich zu packen - Sie möchten einen eigenen kleineren Bereich von Daten, den Sie zum Beispiel auf seine Länge prüfen oder in einer Schleife durchlaufen können.
Nehmen wir als Beispiel an, Sie haben Symbole, die beim Anklicken einen von 4 Zuständen durchlaufen. Wenn sich ein Symbol im Zustand 2 befindet, möchten Sie es zu einem Array von Symbolen im Zustand 2 hinzufügen. Der naheliegendste Weg, dies zu tun, ist das Hinzufügen des Tags zu einem Array; dies würde jedoch zu einem Speicherleck führen. Sie könnten aufrufen $.data()
auf das Kontrollkästchen, aber das bringt nicht ganz das, was Sie erreichen wollen - Sie müssten alle Kontrollkästchen in einer Schleife überprüfen $.data()
um herauszufinden, welche auf der Liste stehen und welche nicht.
Sie müssen eine Abstraktion der Tags in einem Array speichern, und das sind die UUIDs von jQuery. Sie könnten Ihre eigene UUID-Funktionalität schreiben, aber idealerweise nutzen Sie einfach die UUID-Funktionalität, die bereits in JQuery integriert ist, sowohl aus Gründen der Code-Größe als auch der Qualität. Sie könnten JQuery auffordern, eine UUID implizit an das Tag anzuhängen, indem Sie $.data(tag, 'irrelevant', 1)
und prüfen Sie dann tag[jQuery.expando]
um seine UUID zu erhalten, und schließlich verwenden, dass in der Liste... aber das ist ein bisschen ein Hack. Wirklich ideal wäre es, wenn in der öffentlichen API Folgendes offengelegt würde:
$.getUuid(tag)
: Prüft, ob eine UUID vorhanden ist, und erstellt sie, falls keine vorhanden ist - idealerweise wird die Methode aus der $.data()
und erstellt oder holt die uuid für das übergebene Tag.
Also, gibt es einen Grund, dies ist nicht in seine eigene Methode in jQuery ausgeklammert? Ist dies in irgendeiner Weise schädlich? War es einfach nie etwas, das nützlich erschien?
Ich sollte anmerken, dass ich es in der Version von jQuery, die wir verwenden, tatsächlich berücksichtigt habe, und es ist sehr hilfreich. Aber vielleicht gibt es ein zugrundeliegendes Risiko, das ich in meiner Verwendung nicht treffe. Ich bin auch bewusst, ein Plugin, das Art-of erreicht dies, aber es ist ein bisschen gebrochen - und mit 2 codepaths, die gleiche UUID-Funktionalität durchführen ist sowohl ein bisschen verschwenderisch und ein bisschen spröde.