2010-12-01 10 views
6

Esta pregunta puede parecer tonta, pero ¿cuál es la diferencia entre acceder a un elemento (con id "someId") utilizando document.getElementById ("someId") vs. simplemente escribiendo algo Id?document.getElementById ("someId") vs. someId

por ejemplo:

document.getElementById("someId").style.top = "12px"; 

vs

someId.style.top = "12px"; 

Aquí hay un código de ejemplo http://jsfiddle.net/pRaTA/ (me encontré con que no funciona en Firefox)

+2

El problema con la segunda forma es el nombre de los conflictos. Por ejemplo, en su jsfiddle, cambie "abc" por "documento" y vea qué sucede en cada caso. – Alohci

+0

Ver posible duplicado [¿hay variables globales de elementos de árbol DOM aquí?] (Http://stackoverflow.com/q/3434278/1048572) – Bergi

Respuesta

5

Los diferentes rence es que mientras que someId funciona en algunos navegadores, document.getElementById("someId") cumple con el estándar W3C.

+0

Sí, estoy de acuerdo. Probé esto en Firefox y no funcionó. Funciona bien en Chrome/IE sin embargo. http://jsfiddle.net/pRaTA/ – kwa

0

En el cliente de script del lado, hacemos documento .getElementById para obtener el elemento obj en la página web. Para recuperar el elemento particular del DOM y sus propiedades &, debe usar el método getElementById. En Jquery puede simplemente hacer var objX = $ ('# id')

Donde escribir ID directamente no hará el trabajo. Porque cómo extraerás el elemento obj del DOM sin atravesar el documento. El método document.getElementById extraerá la información del elemento del documento. Espero que esto tenga algún sentido.

+0

Lo pregunté porque el segundo método realmente funciona. – kwa

2

Declarar un elemento ID DOM no significa que esté disponible como una variable global en todos los navegadores. La única forma compatible de obtener eso es hacer primero.

var someId = document.getElementById("someId"); 

Editar: Hice este código de prueba que verifica que los navegadores basados ​​en webkit parecen hacer el id disponible como var sin antes declararlo. De acuerdo con this, también IE mostrará este comportamiento.

  • Firefox: Objeto/indefinido
  • Safari: objeto/objeto
  • Chrome: objeto/objeto
  • IE: objeto/objeto (no verificado)

Código:

<html 
    <head> 
    </head> 
<body> 
    <div id="foo"></div> 
    <script type="text/javascript"> 

    alert("getElementById: "+typeof document.getElementById("foo")); 
    alert("as a var: "+typeof foo); 

    </script> 
</body> 
+0

Sí, no funciona en Firefox. por cierto, ¡también funciona en IE! http://jsfiddle.net/pRaTA/ – kwa

+2

Emocionante. Nunca pensé que los navegadores webkit lo hicieran. Aquí hay un posible duplicado http://stackoverflow.com/questions/3434278/ie-chrome-are-dom-tree-elements-global-variables-here –

+0

¡Gracias por ese enlace! ¡Qué gracioso, realmente pensé que me reirían de esta pregunta! :) – kwa

0

Usar simplemente someId es una forma antigua de seleccionar un elemento (creo que esto fue implementado por IE). document.getElementById es el estándar que funciona en todos los navegadores.

Considerando la situación hipotética de que solo admite los navegadores IE anteriores. document.getElementById es aún más confiable y legible. Confiable si está usando todos los números para los identificadores.

por ejemplo:

input element id="123" 

document.getElementById('123').value; // this one works 
123.value; // this one doesn't 
+0

¡Además, esto no funciona en Firefox! – kwa

+0

lea la primera oración del segundo párrafo, "Teniendo en cuenta la situación hipotética de que solo admite los navegadores IE antiguos". – sheeks06

0

elementos como propiedades del objeto global llamado así por el ID del elemento (el segundo ejemplo) Acceso es una comodidad que se originó en IE y ha sido copiado por Safari y Chrome. Es una muy mala idea y no deberías usarla. El problema principal es nombrar colisiones (por ejemplo, elementos con ids perfectamente válidos como "alerta" o "documento").

document.getElementById(), por otro lado, está establecido desde hace mucho tiempo estándar DOM y, además de some idiotic IE flaws, es infalible. Siempre utilícelo con preferencia a la otra forma.

+0

¡Gracias por la explicación! :) – kwa

Cuestiones relacionadas