2012-01-05 29 views
24

document.getElementById('id of div that definately exists') devuelve nulo.getElementById devuelve nulo?

originalmente cargado el javascript última con el fin de asegurarse de que no tendría que preocuparse por el proceso de carga. También intenté usar el evento onload. Es muy espeluznante Cualquier idea o ayuda sería muy apreciada.

+2

duplicado de [¿Por qué jQuery o un método DOM como getElemenById no encuentran el elemento?] (Http://stackoverflow.com/q/14028959/1048572) – Bergi

+0

I Tuve una situación similar en la que mi contenido se generó dinámicamente y el script que consultaba el ID se llamaba antes que el script que creaba el contenido con ese ID.Arreglé ese orden y funcionó para mí –

Respuesta

31

Puede ser causada por:

  1. sintaxis no válida HTML (algunos etiqueta no está cerrada o error similar)
  2. identificadores duplicados - hay dos elementos DOM HTML con el mismo ID
  3. Tal elemento Está tratando de obtener ID se crea dinámicamente (cargado por ajax o creado por script)?

Por favor, publicar su código.

+9

# 2 en realidad no daría 'null' sino solo el primero de los dos elementos con ese id. – Bergi

+0

gracias me salvó la vida –

7

Podría haber muchas razones por document.getElementById no funciona

  • Usted tiene un ID no válido

    ID y NAME fichas deben comenzar con una letra ([A-Za-z]) y puede ir seguido de cualquier número de letras, dígitos ([0-9]), guiones ("-"), guiones bajos ("_"), dos puntos (":") y puntos ("."). (recurso: What are valid values for the id attribute in HTML?)

  • que utiliza un documento de identidad que ya se utiliza como <meta> nombre en la cabecera (por ejemplo, los derechos de autor, autor ...) Parece extraño, pero me pasó a mí: si su 're usando IE eche un vistazo a (recurso: http://www.phpied.com/getelementbyid-description-in-ie/)

  • está orientando un elemento dentro de un marco o un iframe. En este caso si el iframe carga una página dentro del mismo dominio de la matriz se debe orientar la contentdocument antes de buscar el elemento (recurso: Calling a specific id inside a frame)

  • simplemente está buscando a un elemento cuando el nodo no es efectivamente cargado en el DOM, o tal vez es una falta de ortografía sencilla

Dudo que utilizó mismo ID de dos o más veces: en ese caso document.getElementById debe devolver al menos el primer elemento

+0

Gracias por la sugerencia del iframe, ¡me ayudó un montón! –

41

también tenga cuidado de cómo se ejecuta el js en la pag mi. Por ejemplo, si haces algo como esto:

(function(window, document, undefined){ 

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

    console.log(foo); 

})(window, document, undefined); 

Esto devolverá un valor nulo, porque estarías llamando al documento antes de que se cargó.

mejor opción ..

(function(window, document, undefined){ 

// code that should be taken care of right away 

window.onload = init; 

    function init(){ 
    // the code to be called when the dom has loaded 
    // #document has its nodes 
    } 

})(window, document, undefined); 
Cuestiones relacionadas