2010-03-16 13 views
5

Dans DOM, est-il correct de se référer aux attributs d'un élément comme celui-ci:Dans DOM, est-il correct d'utiliser .notation pour obtenir/définir des attributs?

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

? Mon profond respect pour les objets et leur vie privée, et mon sens que les choses pourraient aller terriblement mal si je ne fais pas attention, me donne envie de tout faire plus comme ceci:

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

etc... 

Est-il vraiment nécessaire d'utiliser ces méthodes accesseurs ? Bien sûr, cela peut être plus ou moins nécessaire selon que je suis certain que les éléments que je manipule auront les attributs que j'attends d'eux, mais en général les gars des DOM sont-ils d'accord pour utiliser .notation plutôt que des getters et setters?

Merci!

Répondre

3

Pour les documents XML, vous devez utiliser getAttribute/setAttribute/removeAttribute etc. Il n'y a pas de correspondance des propriétés JavaScript aux attributs DOM.

Pour les documents HTML, vous pouvez utiliser getAttribute et al pour accéder aux attributs, mais il est préférable de ne pas parce IE6-7 a des difficultés avec elle. Les propriétés HTML DOM niveau 2 sont non seulement plus fiables, mais également plus faciles à lire.

Il n'est pas clair si vous utilisez des documents XML ou HTML ici. Clairement origin n'est pas un attribut HTML; Les éléments 'custom' et les attributs comme celui-ci ne doivent pas être inclus dans les documents HTML. Mais on ne sait pas à quoi se réfère universe.style.deterministic; vous n'obtiendriez pas une recherche de style CSS mappée sans un attribut HTML style.

+0

getElementById ne recherche pas . Et 'univers' est certainement un identifiant valide pour les balises HTML. –

+0

Bon point, j'ai choisi l'exemple sans le regarder! :-) fixe. – bobince

+1

Ceci est la réponse. –

3

Oui, c'est bien ;-) S'il y a un attribut dans le DOM, vous pouvez le définir ou l'obtenir directement. Aucun élément privé ou en lecture seule ou quoi que ce soit. Au fait, JavaScript n'a pas de mot clé 'then'.

2

En raison de problèmes croisés navigateur je toujours utiliser getAttribute et setAttribute:

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

Je ne me rappelle pas les détails mais j'ai eu des problèmes avec le style de la propriété universe.origin et dynamiquement créé des éléments DOM.

0

Non, ce n'est pas bien de le faire. La plupart des propriétés des objets DOM peuvent être remplacées. Vous ne ruinerez pas le comportement du navigateur, car il n'utilise pas l'API DOM. Mais vous ruinerez vos scripts JS s'ils essaient d'utiliser la propriété écrasée dans sa signification d'origine.

Ma façon de faire les choses, quand j'ai plusieurs attributs pour attacher à un objet (par opposition à un seul drapeau ou lien), est de créer un objet personnalisé et un lien puis de l'élément DOM:

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