getElementById返回null?

时间:2012-01-05 08:32:36

标签: javascript getelementbyid

document.getElementById('id of div that definately exists')返回null。

我最初加载了javascript,以确保我不需要担心onload事件。我也尝试过使用onload事件。这非常怪异。任何想法或帮助将不胜感激。

3 个答案:

答案 0 :(得分:49)

另外要小心如何在页面上执行js。例如,如果您执行以下操作:

(function(window, document, undefined){

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

  console.log(foo);

})(window, document, undefined); 

这将返回null,因为您在加载文档之前调用该文档。

更好的选择..

(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);

答案 1 :(得分:42)

可能由以下原因引起:

  1. HTML语法无效(某些标记未关闭或类似错误)
  2. 重复ID - 有两个具有相同ID的HTML DOM元素
  3. 也许你想通过ID获取的元素是动态创建的(由ajax加载或由脚本创建)?
  4. 请发布您的代码。

答案 2 :(得分:8)

document.getElementById无效的原因可能有很多原因

  • 您的ID无效

      

    ID和NAME令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(“ - ”),下划线(“ _“),冒号(”:“)和句号(”。“)。   (资源:What are valid values for the id attribute in HTML?

  • 您在标题中使用了一些已经用作<meta>名称的ID(例如版权,作者......)它看起来很奇怪但是发生在我身上:如果您正在使用IE看看在 (资源:http://www.phpied.com/getelementbyid-description-in-ie/

  • 您要定位框架或iframe中的元素。在这种情况下,如果iframe在父级的同一域中加载页面,则应在查找元素之前定位contentdocument (资源:Calling a specific id inside a frame

  • 当节点未在DOM中有效加载时,您只是寻找一个元素,或者它可能是一个简单的拼写错误

我怀疑你使用了两次或更多相同的ID:在这种情况下document.getElementById应该至少返回第一个元素