2010-03-30 17 views
5

Ich mache eine ziemlich erschöpfende Reihe von DOM-Manipulationen, bei denen einige Elemente (speziell Formularelemente) einige Ereignisse haben.Ein HTMLElement-Objekt aus dem jQuery-Objekt ableiten

Ich erstelle dynamisch (tatsächlich aus einem Quellelement klonend) mehrere <select> Boxen und weise ihnen ein event() zu.

Das Änderungsereignis wird ausgeführt, und im Kontext des Ereignisses ist "this" das HTML-Element-Objekt.

Was ich an diesem Punkt jedoch tun muss, ist einen Kontext für dieses HTML-Element-Objekt zu bestimmen. Ich habe diese bereits als jQuery Einheiten in verschiedenen Arrays gespeicherten Objekte, aber offensichtlich

[HTMLElement Object] != [Object Object]

Und der Trick ist, dass ich nicht mehr als $ (this) werfen kann und einen gültigen Vergleich zu machen, da dies ein neues Objekt anlegen würde und die Zeiger wäre anders.

Also ... Ich habe meinen Kopf eine Weile gegen diesen Kopf geschlagen. In der Vergangenheit konnte ich dieses Problem umgehen, indem ich einen innerHTML-Vergleich durchführte, aber in diesem Fall sind die Objekte, die ich vergleiche, zu 100% identisch, nur dass es viele davon gibt. Daher brauche ich einen soliden Vergleich.

Das wäre einfach, wenn ich irgendwie das HTMLElement-Objekt von meinem ursprünglichen jQuery-Objekt ableiten könnte.

Gedanken, andere Ideen? Hilfe. :(

Antwort

4

kann nicht nur Sie $(this).data("something") verwenden, um Daten auf Elemente zu halten und dann später die Werte überprüfen? (Dass Sie ist vorausgesetzt, kann nicht nur diese Dinge plain ol geben‘‚id‘Werte.)

Oh auch jQuery selbst hat ein „guid“ Element, das Sie verwenden können (Vorsicht!)

$(myNewObject).data("identity", $.quid++); 
+0

Brilliant. Ich wusste nicht, dass es existiert ... wo wird der Wert tatsächlich gespeichert? Der Deal mit den IDs ist, dass sie in dieser Entwicklungsphase bereits IDs haben, die ich aufgrund einiger Abwärtskompatibilitätsprobleme noch nicht entfernen kann. –

+0

Ich akzeptiere das für jetzt, aber ich bin immer offen für weitere Ideen. Aber data() scheint den Trick zu machen. –

+0

Na gut, wenn die Objekte "ID" -Werte haben, warum nicht einfach diese verwenden?Beachten Sie, dass Sie sicherstellen müssen, dass alle "id" -Werte sowieso eindeutig sind, da sonst seltsame und mysteriöse (im Allgemeinen schlechte) Dinge passieren werden. – Pointy

4

Dies wäre einfach, wenn ich irgendwie das Htmlelement-Objekt aus meinem Ursprung jQuery-Objekt ableiten könnte

Sie nicht nur $("#object")[0] oder $("#object").get(0) mit "ableiten" meinen Sie?

+0

Nein. Die Auswahl nach ID ist ebenfalls keine Option. –

+1

Er meint, dass $() [0], wenn Ihr jQuery-Objekt bereits mit einem Selektor geladen ist, Ihnen die Elemente geben wird, die mit dem angegebenen Selektor gefunden wurden. Beispiel: $ (this) [0] == Dies gibt wahr zurück, während $ (this) == false zurückgibt. – Bob

+2

tatsächlich gibt $ ("# object") [0] das native HTML-DOM-Element zurück. – jAndy

0

Wenn Sie ein jQuery-Objekt enthält die Elemente beibehalten haben Sie erstellt/geklont (nennen wir es „jqClonedElements“), können Sie diesen Satz zu dem einzigen Element reduzieren „this“ mit $().filter(element) passend:

var jqThis = jqClonedElements.filter(this); 

Danach, können Sie bestätigen, dass Ihr Element gefunden wurde, wie folgt:

var elementWasFound = (jqThis.length > 0); 

das ist alles sein sollte, dort ist zu ihm!

-Matt

Verwandte Themen