2010-11-23 26 views

Respuesta

20

Claro, la gente lo ha estado haciendo por años. No se recomienda ya que es complicado y puede meterse con las propiedades existentes.

Si está bucleando el código con for..in, su código se puede romper porque ahora va a enumerar a través de estas propiedades recién conectadas.

Sugiero usar algo como jQuery's .data que mantiene los metadatos unidos a los objetos. Si no desea utilizar una biblioteca, vuelva a implementar jQuery.data

+0

Genial ... ¿'jQuery utiliza' datos' o puedo asignarle algún valor? –

+1

'$ .data' está definido por jQuery. Lo usaría como '$ ('# el'). Data ('clave', 'valor')'. –

+1

Es '$ (elemento) .data ('nombre', valor)' para establecer un valor, y '$ (elemento) .data ('nombre')' para leerlo. –

15

Sí, puede agregar sus propias propiedades a los objetos DOM, pero recuerde tener cuidado para evitar el nombramiento de colisiones y referencias circulares.

document.getElementById("myElement").myProperty = "my value"; 

HTML5 introdujo una forma válida de adjuntar datos a los elementos a través de la markup - utilizando el prefijo data- atributo. Puede utilizar este método en HTML 4 documentos sin problemas también, pero no validará:

<div id="myElement" data-myproperty="my value"></div> 

que se puede acceder a través de JavaScript usando getAttribute():

document.getElementById("myElement").getAttribute("data-myproperty"); 
+1

¿Debería esa última línea ser 'setAttribute()'? – alex

+1

@alex: no, cometió un error aunque :-) –

+5

data- attributes solo puede almacenar cadenas (u objetos serializables/deserializables a/desde cadenas), no objetos de tiempo de ejecución generales, mientras que establecer una nueva propiedad en un objeto dom puede hacerlo. – Triynko

4

¿Quieres añadir propiedades a el objeto o atributos del elemento?

Puede añadir atributos usando setAttribute

var el = document.getElementById('myelement'); 
el.setAttribute('custom', 'value'); 

o simplemente puede agregar propiedades al objeto javascript:

var el = document.getElementById('myelement'); 
el.myProperty = 'myValue'; 
6

En caso de que alguien se pregunte en 2015, sí, puede - y jQuery está haciendo exactamente eso en data. Simplemente elija nombres a prueba de futuro como prefijos de proveedor o sufijos aleatorios basados ​​en tiempo (jQuery).

Cuestiones relacionadas