Considere el siguiente código:html Identificación del elemento como variable javascript
<html>
<head></head>
<body>
<div id='test' class='blah'>
<a href='http://somesite.com/' id='someLink'>click!</a>
</div>
</body>
</html>
Así que sólo recientemente descubierto que esto crea un objeto de JavaScript llamada someLink
y por ejemplo que puede obtener el valor del atributo href con someLink.href
. Probé esto en los últimos Chrome, FF e IE y funciona.
En primer lugar, ¿por cuánto tiempo ha estado presente esta "función"? Imagino probablemente un tiempo, porque hace años que sé que las ID de los elementos html en una página deben ser únicas, y si tiene más de un elemento que comparte la misma ID, la última sobrescribe la (s) anterior (es), y utilizando por ejemplo getElementById() devolverá el último. Pero nunca entendí realmente por qué, pero ahora, mirándolo como una perspectiva de "esto es crear un objeto", tiene sentido. Entonces, en cuanto a poder acceder directamente con el objeto id-name-as-javascript ... ¿cuánto tiempo ha pasado? IE6 era? ¿Más temprano?
2º ... Supongo que esto es más un punto de discusión que una pregunta, pero ... IMO esto no parece ser una muy buena "característica" para tener ... No es el punto de tener un DOM y un contenedor funcionan como getElementById()
, para dar algo de organización y, lo que es más importante, ¿reducir los problemas de espacio de nombres? No creo que deba preocuparme por los elementos aleatorios html en una página que sobrescriben mis variables de JavaScript (algo que ha sucedido recientemente, y es por eso que descubrí esta "característica"). ¿Alguien sabe por qué esto es como es, cuál es la lógica detrás de esto?
"He sabido por años que los ID de los elementos html en una página deben ser únicos, y si tiene más de un elemento que comparte el mismo ID, el último sobrescribe el anterior (s) y utiliza, por ejemplo getElementById() devolverá el último "Hasta donde yo sé,' getElementById() 'devolverá el ** primer **, no el último, elemento que tiene el ID dado; aunque definitivamente no es consistente (o, al menos, no se debe confiar en que sea consistente). –
Golpeas el clavo en la cabeza con tu segundo punto. No es * una buena característica que tener, por lo que ha quedado obsoleta desde siempre y no funcionará si está utilizando la directiva '" use strict "'. – zzzzBov