2009-07-08 7 views
3

Aujourd'hui, je suis tombé sur la possibilité d'accéder à un élément DOM en Javascript simplement par son identifiant, par ex. comme ceci:Quels sont les inconvénients de l'accès direct aux éléments DOM par ID?

elementid.style.backgroundColor = "blue" 

J'ai testé avec un extrait très court si cela fonctionne dans IE, Firefox et Chrome - et c'est le cas. Voici l'extrait je:

<html><head> 
<script> 
    function highlight() { 
     content.style.backgroundColor = "blue"; 
     content.style.color = "white"; 
    } 
</script> 
</head> 
<body> 
    <div id="content">test content</div> 
    <div onclick="highlight()">highlight content</div> 
</body></html> 

Alors je me suis demandé dans quels cas document.getElementById('elementid') doit être utilisé (ou le remplacement des cadres similaires comme $()) et quels sont les inconvénients de l'accès direct.

Je n'ai pas trouvé de documentation utile à ce sujet. Partout, soit getElementById, soit des méthodes de structure sont utilisées.

+0

Cela ne fonctionne pas dans Firefox (2). –

Répondre

7

Il est propriété de Microsoft gubbins. Il ne fonctionne pas dans de nombreux navigateurs — en particulier en mode standard (et vous voulez que le mode standard évite les incohérences quirks mode telles que IE obtenant width incorrect).

4

Vous devriez également vous préoccuper de l'espace de noms. À l'heure actuelle, vous le traitez comme s'il s'agissait d'une variable dans l'espace de nom global, et vous ne devriez faire confiance ni à vous ni à aucune bibliothèque que vous incluez déclarer des variables globales ayant le même nom que les ID DOM. Il en va de même pour votre fonction de surbrillance.

Même si les ID avec des tirets sont parfaitement valides, ceux-ci seraient inaccessibles via cette méthode.

par exemple. <div id="container-wrapper"><div id="container"> ... </div></div>

deviendrait container-wrapper.style.color qui essaierait alors de soustraire wrapper.style.color du conteneur.

2

Cela ne fait partie d'aucune norme. De plus, des variables simples peuvent être écrasées. Var content peut être redéclaré à n'importe quel endroit de votre script, ou de la bibliothèque externe (et, oui, je sais que les variables globales sont mauvaises, mais ppl les utilise encore ...) et votre script va se casser.

Et, naturellement, vous ne pouvez pas utiliser des ID comme alert ou document etc.

Questions connexes