Comme mentionné dans la réponse précédente, ce comportement est appelé accès nommé sur l'objet fenêtre . La valeur de l' name
attribut pour certains éléments et la valeur de l' id
attribut pour tous les éléments sont mises à disposition en tant que propriétés de l' window
objet global . Ce sont des éléments nommés. Puisque window
c'est l'objet global dans le navigateur, chaque élément nommé sera accessible en tant que variable globale.
Cela a été ajouté à l'origine par Internet Explorer et a finalement été implémenté par tous les autres navigateurs simplement pour la compatibilité avec les sites qui dépendent de ce comportement. Fait intéressant, Gecko (le moteur de rendu de Firefox) a choisi de l'implémenter en mode excentrique uniquement, tandis que d'autres moteurs de rendu l'ont laissé en mode standard.
Cependant, à partir de Firefox 14, Firefox prend désormais en charge l'accès nommé sur l' window
objet en mode standard également. Pourquoi ont-ils changé cela? Il s'avère qu'il y a encore beaucoup de sites qui s'appuient sur cette fonctionnalité en mode standard. Microsoft a même publié une démo marketing qui l'a empêché de fonctionner dans Firefox.
Webkit a récemment considéré le contraire , reléguant l'accès nommé sur l' window
objet au mode excentrique uniquement. Ils ont décidé contre cela par le même raisonnement que Gecko.
Donc… fou comme il semble que ce comportement est désormais techniquement sûr à utiliser dans la dernière version de tous les principaux navigateurs en mode standard . Mais si l'accès nommé peut sembler quelque peu pratique, il ne doit pas être utilisé .
Pourquoi? Une grande partie du raisonnement peut être résumée dans cet article sur les raisons pour lesquelles les variables globales sont mauvaises . Autrement dit, avoir un tas de variables globales supplémentaires conduit à plus de bugs. Disons que vous tapez accidentellement le nom d'un var
et qu'il vous arrive de taper un id
d'un nœud DOM, SURPRISE!
De plus, bien qu'il soit standardisé, il existe encore quelques différences dans les implémentations d'accès nommé du navigateur.
- IE rend incorrectement la valeur de l'
name
attribut accessible pour les éléments de formulaire (entrée, sélection, etc.).
- Gecko et Webkit ne rendent pas les
<a>
balises accessibles via leur name
attribut de manière incorrecte .
- Gecko ne gère pas correctement plusieurs éléments nommés avec le même nom (il renvoie une référence à un seul nœud au lieu d'un tableau de références).
Et je suis sûr qu'il y a plus si vous essayez d'utiliser l'accès nommé sur les cas marginaux.
Comme mentionné dans d'autres réponses, utilisez document.getElementById
pour obtenir une référence à un nœud DOM par son id
. Si vous devez obtenir une référence à un nœud par son name
attribut, utilisez document.querySelectorAll
.
Veuillez ne pas propager ce problème en utilisant l'accès nommé dans votre site. Tant de développeurs Web ont perdu du temps à essayer de retrouver ce comportement magique . Nous devons vraiment agir et obtenir des moteurs de rendu pour désactiver l'accès nommé en mode standard. À court terme, certains sites feront de mauvaises choses, mais à long terme, cela aidera à faire avancer le Web.
Si vous êtes intéressé, j'en parle plus en détail sur mon blog - https://www.tjvantoll.com/2012/07/19/dom-element-references-as-global-variables/ .