2010-03-16 17 views
5

En DOM, ¿está bien para referirse a atributos de un elemento como este:En DOM, ¿está bien utilizar .notación para obtener/configurar atributos?

var universe = document.getElementById('universe'); 
    universe.origin = 'big_bang'; 
    universe.creator = null; 
    universe.style.deterministic = true; 

? Mi profundo respeto por los objetos y su privacidad, y mi sentido de que las cosas podrían salir muy mal si no tengo cuidado, me dan ganas de hacer todo de la misma familia:

var universe = document.getElementById('universe'); 
    if(universe.hasAttribute('origin')) then universe.origin = 'big_bang'; 

etc... 

¿Es realmente necesario el uso de esos métodos de acceso ? Por supuesto, puede ser más o menos necesario dependiendo de cuán seguro estoy de que los elementos que estoy manipulando tendrán los atributos que espero, pero en general ¿los chicos del DOM consideran que es correcto usar .notación en lugar de getters y setters?

Gracias!

Respuesta

3

Para documentos XML, debe utiliza getAttribute/setAttribute/removeAttribute etc. No hay correspondencia entre las propiedades de JavaScript a los atributos DOM.

Para documentos HTML, que puede utilizar getAttribute et al acceder a los atributos, pero es mejor no hacerlo porque IE6-7 tiene dificultades con ella. Las propiedades HTML de DOM Level 2 no solo son más confiables, sino también más fáciles de leer.

No está claro si está utilizando documentos XML o HTML aquí. Claramente origin no es un atributo de HTML; Los elementos y atributos 'personalizados' como este no deberían incluirse en los documentos HTML. Pero no está claro a qué se refiere universe.style.deterministic; no se asignaría una búsqueda de estilo CSS sin un atributo HTML style.

+0

getElementById no busca . Y 'universe' es ciertamente una identificación válida para etiquetas HTML. –

+0

¡Buen punto, escogí el ejemplo sin mirarlo! :-) corregido. – bobince

+1

Esta es la respuesta. –

3

Sí, está bien ;-) Si hay un atributo en el DOM, puede establecerlo u obtenerlo directamente. No hay elementos privados o de solo lectura ni nada. Por cierto, JavaScript no tiene una palabra clave 'then'.

2

Debido a problemas con el navegador cruz Siempre utilizar getAttribute y setAttribute:

if(!universe.getAttribute('origin')) 
{ 
    universe.setAttribute('origin', 'big_bang'); 
} 

no recuerdo los detalles, pero he tenido problemas con el estilo de la propiedad universe.origin y elementos DOM creados de forma dinámica.

0

No, no está bien hacerlo. La mayoría de las propiedades de los objetos DOM pueden sobrescribirse. No arruinará el comportamiento del navegador, ya que no usa la API DOM. Pero arruinará sus scripts JS si intentan usar la propiedad sobreescrita en su significado original.

mi propia manera de hacer las cosas, cuando tenga varios atributos para adjuntar a un objeto (en contraposición a una sola bandera o un enlace), es crear un objeto personalizado y luego vincularlo a partir del elemento DOM:

var Universe = { 
    origin: "big_bang", 
    creator: null, 
    style: { deterministic: true } 
}; 
document.getElementById('universe')._universe = Universe; 
Cuestiones relacionadas