¿Puedo agregar propiedades arbitrarias a los objetos DOM de JavaScript, como los elementos <INPUT>
o <SELECT>
? O, si no puedo hacer eso, ¿hay alguna manera de asociar mis propios objetos con los elementos de la página a través de una propiedad de referencia?¿Puedo agregar propiedades arbitrarias a objetos DOM?
Respuesta
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
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");
¿Debería esa última línea ser 'setAttribute()'? – alex
@alex: no, cometió un error aunque :-) –
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
¿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';
Si debe, no utilizar atributos HTML estándar. Aquí hay un tutorial sobre el uso de los atributos personalizados:
http://www.javascriptkit.com/dhtmltutors/customattributes.shtml
Es HTML5, pero es compatible con versiones anteriores.
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).
- 1. ¿Qué hay de malo en agregar propiedades a los objetos del elemento DOM?
- 2. ¿Es una mala práctica agregar propiedades a los nodos DOM?
- 3. ¿Cómo obtener las propiedades CSS antes de agregar a dom?
- 4. Agregar objetos a objetos existentes
- 5. Agregar variables a los elementos DOM
- 6. ¿Puedo agregar una función pública a objetos en JavaScript? ¿Cómo?
- 7. Métodos de JQuery y propiedades DOM
- 8. Agregar objetos únicos a Core Data
- 9. Agregar objetos a una matriz de objetos en Powershell
- 10. Agregar objetos a una lista J
- 11. Recuperando elementos DOM nativos de objetos jQuery?
- 12. ¿Cómo agregar clase a un objeto img en DOM, PHP?
- 13. Agregar 2 o más objetos a JFrame
- 14. Python: Agregar campos a objetos dinámicamente
- 15. C# agregar objetos (similar a delegados)
- 16. agregar elementos a la matriz de objetos
- 17. ¿Agregar objetos de cadena a NSMutableArray?
- 18. Numeración de dimensiones arbitrarias
- 19. Cómo concatenar propiedades de varios objetos JavaScript
- 20. ¿Cómo elimino correctamente el audio html5 sin agregar a DOM?
- 21. Cómo agregar EventListener a elementos no dom en javascript?
- 22. Accediendo a propiedades de una matriz de objetos
- 23. añadir propiedades a objetos stdClass de otro objeto
- 24. Agregar un elemento al DOM con JavaScript
- 25. KVO para propiedades de objetos enteros
- 26. ¿Cómo puedo rastrear referencias a objetos Perl?
- 27. ¿Puedo usar métricas arbitrarias para buscar árboles KD?
- 28. PHP: Asignación de objetos a propiedades estáticas, ¿es ilegal?
- 29. Secciones arbitrarias en roxygen docs
- 30. ¿Puedo agregar "Smartypants" a restructuredText?
Genial ... ¿'jQuery utiliza' datos' o puedo asignarle algún valor? –
'$ .data' está definido por jQuery. Lo usaría como '$ ('# el'). Data ('clave', 'valor')'. –
Es '$ (elemento) .data ('nombre', valor)' para establecer un valor, y '$ (elemento) .data ('nombre')' para leerlo. –