2012-03-16 25 views
10

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?

+0

"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). –

+6

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

Respuesta

9

En primer lugar, ¿cuánto tiempo lleva funcionando esta "función"?

Es un Microsoft-ismo que surgió alrededor de IE 4 si no recuerdo mal.

Algunos otros navegadores han agregado soporte para ello en un esfuerzo por ser compatible con código mal escrito que depende de ello. Algunos pueden solo admitirlo en quirks mode.

esto no parecer una muy buena "característica" tener

correcta. No lo uses :)

3

Sí, ha existido durante mucho tiempo, que es probablemente la única razón por la que existe. La eliminación de dicha "característica" romperá la compatibilidad con los sitios web existentes, que los proveedores de navegadores son muy reacios a hacer.

Tiene razón al decir que no es una buena idea. Es una idea profundamente mala y puede dar lugar a conflictos de nombres, así como a una contaminación innecesaria del espacio de nombres global.

+0

Creo que la "característica" se elimina en el modo "uso estricto". –

+1

@Rocket: '" use strict "' es una característica de ECMAScript y no afecta el comportamiento de DOM. –

Cuestiones relacionadas