【问题标题】:getElementById returns null? [closed]getElementById 返回 null? [关闭]
【发布时间】:2014-08-15 23:56:58
【问题描述】:

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

我最初加载 javascript 是为了确保我不需要担心 onload 事件。我也尝试使用 onload 事件。这很恐怖。任何想法或帮助将不胜感激。

【问题讨论】:

  • 我遇到了类似的情况,我的内容是动态生成的,并且在使用该 ID 创建内容的脚本之前调用了查询 ID 的脚本。我修复了该顺序,它对我有用
  • 确保只写 id 的名称,id 前面没有#
  • 对于像我这样有此问题的人,经过大量试验,我发现使用getElementById() 时使用window.onload=myFunction() 时返回null,但使用<body onload="myFunction()"> 时返回null
  • 这通常发生在我不小心将我的 javascript 加载到文档顶部而不是在 html 加载到底部之后。

标签: javascript getelementbyid


【解决方案1】:

还要小心你如何在页面上执行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 提醒这也是我可能忽略的一种可能性。
【解决方案2】:

可能是由以下原因引起的:

  1. 无效的 HTML 语法(某些标签未关闭或类似错误)
  2. 重复 ID - 有两个具有相同 ID 的 HTML DOM 元素
  3. 您尝试通过 ID 获取的元素可能是动态创建的(由 ajax 加载或由脚本创建)?

请发布您的代码。

【讨论】:

  • #2 实际上不会产生null,而只会产生具有该 id 的两个元素中的第一个。
  • 我的情况#3!
  • #1 可能与需要打开和关闭标签的元素的单个标签一样微妙。例如:<datalist id="foo" /><datalist id="foo"></datalist>
  • #1 也是我的答案。我的 在 ng-repeat 中。
  • 对我来说,我在测试时从控制台清除了一个脚本错误。在修复错误之前,我无法获得 id
【解决方案3】:

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 应该至少返回第一个元素

【讨论】:

  • 感谢 iframe 提示,帮了我很多忙!
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多