2009-09-09 6 views
75

Quiero asociar un objeto JavaScript con un elemento HTML. ¿Hay una manera simple de hacer esto?¿Hay una buena manera de adjuntar objetos JavaScript a elementos HTML?

Me di cuenta HTML DOM define un método setAttribute y parece que esto se define para el nombre de atributo arbitrario. Sin embargo, esto solo puede establecer valores de cadena. (Por supuesto, puedes usar esto para almacenar las claves en un diccionario.)

Específicos (aunque estoy en su mayoría interesados ​​en la cuestión general):

En concreto, no tengo elementos HTML que representan los nodos en un árbol y estoy intentando habilitar arrastrar y soltar, pero el evento de soltar jQuery solo me dará los elementos que se arrastran y sueltan.

El patrón normal para obtener información para los manejadores de eventos parece ser crear los elementos HTML al mismo tiempo que crea objetos JavaScript y luego definir manejadores de eventos cerrando estos objetos JavaScript; sin embargo, esto no funciona muy bien en este caso (podría tener un objeto global que se llena cuando comienza una resistencia ... pero esto se siente un poco desagradable).

Respuesta

35

¿Has mirado el método jQuery data()? Puede asignar objetos complejos al elemento si lo desea o puede aprovechar ese método para mantener una referencia a un objeto (u otros datos) como mínimo.

+7

Gracias: Esto es más o menos lo que estaba buscando. Interesantemente para definir este método, jquery almacena las claves en un diccionario global en un atributo de cadena en cada elemento. El nombre de este atributo de cadena se genera aleatoriamente cuando jquery se carga por primera vez. (sugiriendo que no hay una buena manera de hacerlo, no hay una manera más agradable de hacer esto solo usando el DOM) – user47741

+3

Vale la pena señalar que 'data()' * de jQuery funciona * usando la [respuesta bobince dio ] (http://stackoverflow.com/a/1402782/42921) así que si aún no está usando jquery, también podría usar eso. –

+4

Es curioso cómo puedo mirar hacia atrás en esta respuesta 6 años después y pensar: "esta es una respuesta muy poco óptima. @bobince debería tener la aceptada". –

79

Los objetos JavaScript pueden tener propiedades arbitrarias asignadas, no hay nada especial que deba hacer para permitirlo. Esto incluye elementos DOM; aunque este comportamiento no forma parte del estándar DOM, ha sido el caso que se remonta a las primeras versiones de JavaScript y es totalmente confiable.

var div= document.getElementById('nav'); 
div.potato= ['lemons', 3]; 
+3

@ tat.wright - Las propiedades arbitrarias en los elementos HTML de las que él habla se llaman propiedades Expando. También tenga en cuenta que div.potato no significa div.getAttribute ("potato") – nickytonline

+2

No es totalmente confiable en absoluto. Por ejemplo, una llamada a 'document.expando = false' en IE evita todas las propiedades de expansión en elementos HTML dentro del documento. –

+33

@Tim Down: entonces simplemente no lo hagas. No veo por qué no es confiable, es como decir que el objeto String no es confiable, porque puede establecerlo como nulo. – simon

Cuestiones relacionadas