2010-03-30 4 views
5

Je suis en train de faire une série assez exhaustive de manipulations DOM où quelques éléments (en particulier des éléments de formulaire) ont des événements.Dérivation d'un objet HTMLElement à partir de l'objet jQuery

Je crée dynamiquement (en fait, clonage à partir d'un élément source) plusieurs boîtes <select> et leur attribue un événement change(). L'événement change s'exécute et, dans le contexte de l'événement, "this" est l'objet élément HTML.

Ce que je dois faire à ce stade est cependant de déterminer un contexte pour cet objet élément HTML. J'ai ces objets stockés déjà comme des entités jQuery dans des tableaux divers, mais il est évident

[HTMLElement Object] != [Object Object]

Et l'astuce est que je ne peux pas jeter $ (ce) et de faire une comparaison valable car cela créer un nouvel objet et la le pointeur serait différent.

Alors ... Je me suis cogné la tête contre ça pendant un moment. Dans le passé, j'ai pu contourner ce problème en faisant une comparaison innerHTML, mais dans ce cas, les objets que je compare sont 100% identiques, mais il y en a beaucoup. Par conséquent, j'ai besoin d'une solide comparaison.

Cela serait facile si je pouvais en quelque sorte dériver l'objet HTMLElement de mon objet jQuery d'origine.

Pensées, autres idées? Aidez-moi. :(

Répondre

4

ne pouvez-vous utiliser juste $(this).data("something") pour conserver les données sur vos éléments et vérifier les valeurs plus tard? (Cela suppose que vous ne pouvez pas donner ces choses ol PLAIN valeurs « id ».)

Oh aussi jQuery a lui-même un élément « guid » que vous pouvez utiliser (attention!)

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

Brillant. Je ne savais pas que ça existait ... où est la valeur stockée? L'accord avec les ID est qu'ils ont déjà des ID dans cette phase de développement que je ne suis pas encore prêt à supprimer en raison de problèmes de compatibilité ascendante. –

+0

Accepter cela pour l'instant mais je suis toujours ouvert à plus d'idées. Mais data() semble faire l'affaire. –

+0

Eh bien, si les objets ont des valeurs "id", pourquoi ne pas les utiliser?Notez que vous devez vous assurer que toutes les valeurs "id" sont uniques de toute façon, sinon des choses étranges et mystérieuses (généralement mauvaises) vont commencer à se produire. – Pointy

4

Ce serait facile si je pouvais faire dériver l'objet HTMLElement de mon origine objet jQuery

vous ne voulez pas dire simplement $("#object")[0] ou $("#object").get(0) avec 'dériver' et vous?

+0

Non. La sélection par ID n'est pas une option non plus. –

+1

Il signifie que votre objet jQuery est déjà chargé avec un sélecteur, $() [0] vous donnera les éléments trouvés en utilisant le sélecteur donné. Exemple: $ (this) [0] == this retourne true, alors que $ (this) == retourne false. – Bob

+2

en effet, $ ("# object") [0] renvoie l'élément DOM HTML natif. – jAndy

0

Si vous maintenez un objet jQuery contenant les éléments que vous avez créés/clonés (appelons-le « jqClonedElements »), vous pouvez réduire cet ensemble à l'unique élément correspondant à « ce » avec $().filter(element):

var jqThis = jqClonedElements.filter(this); 

Après cela, vous voudrez peut-être confirmer que votre élément a été trouvé, comme suit:

var elementWasFound = (jqThis.length > 0); 

ce devrait être tout ce qu'il ya à faire!

-Matt

Questions connexes