Javascript GetElementById在使用window.onload时返回null,但在从控制台运行时不返回null

Javascript GetElementById在使用window.onload时返回null,但在从控制台运行时不返回null,javascript,html,Javascript,Html,我试图在我的网站中按id查找div,但当我从window.onload调用getElementById时,返回了null。我已经验证了我正在寻找的元素是否存在,并且它没有与任何其他元素共享Id 奇怪的是,当我从chrome的开发者工具运行一个控制台命令时,div会按原样返回 我已经提供了一个指向JSFIDLE上的简化版本的链接,以及我正在尝试的内容的简要展示,非常感谢各位优秀人士提供的任何意见 <script> var hasElement = document.getEle

我试图在我的网站中按id查找div,但当我从window.onload调用getElementById时,返回了null。我已经验证了我正在寻找的元素是否存在,并且它没有与任何其他元素共享Id

奇怪的是,当我从chrome的开发者工具运行一个控制台命令时,div会按原样返回

我已经提供了一个指向JSFIDLE上的简化版本的链接,以及我正在尝试的内容的简要展示,非常感谢各位优秀人士提供的任何意见

<script>
    var hasElement = document.getElementById('someId');
    alert(hasElement);
</script>
<div id="someId">true</div>

var haseElement=document.getElementById('someId');
警报(HASSELEMENT);
真的

问题是您需要更改此选项:

window.onload=urlFinder();
为此:

window.onload=urlFinder;
或者,您可以在相关HTML之后的
之前调用函数

您正在立即调用函数,然后将返回结果分配给
window.onload
,而不是将函数引用分配给
window.onload
。记住,无论何时使用
()
,都意味着现在就执行它。任何时候只要指定函数名,就意味着为函数指定一个引用,稍后当某人选择对变量应用
()
时,可以调用该函数

另外,您的JSFIDLE不是有效的测试,因为整个FIDLE设置为等待window.onload(在左上角)触发,这可能会让您更加困惑

这里是JSFIDLE的固定版本(您在一些代码中也有JS错误):

您试图获取的DOM元素还不存在 您试图在
div写入页面之前获取它。脚本标记将立即执行,除非您明确告诉它等待

您有两个选择: 将脚本放在HTML之后
true
var haseElement=document.getElementById('someId');
警报(HASSELEMENT);
告诉脚本在加载事件上执行 使用基本Javascript


window.onload=函数(){
var haseElement=document.getElementById('someId');
警报(HASSELEMENT);
}
真的
…或使用jQuery


$(文档).ready(函数(){
var hasElement=$(“#someId”);
警报(HASSELEMENT);
});
真的
更新:

或者,在大多数现代浏览器中,可以使用on the script标记来避免默认的同步阻塞行为

关于控制台:
控制台将在对象的最后一个状态记录对该对象的引用,而不是在脚本中调用该对象时的状态。有关说明,请参阅本文:

这不在window.onload中,您也可以在小提琴中使用
window.onload=urlFinder()
将onload设置为返回urlFinder函数,而不是函数本身。您的小提琴已经设置为运行在onload事件中输入的javascript,请参见jsfiddle站点
窗口左侧的设置。onload=urlFinder()应该是
窗口。onload=urlFinder你不想调用函数,你只想设置它。事实证明这就是我想要的。我仍然需要在window.onload上运行函数,但我遇到的问题是当它运行div时还不存在。谢谢你们的帮助。谢谢你们的固定小提琴,也谢谢你们启发我window.onload是如何工作的。事实证明,我只需要在页脚而不是页眉中调用函数,它就可以工作了。
<div id="someId">true</div>
<script>
    var hasElement = document.getElementById('someId');
    alert(hasElement);
</script>
<script>
window.onload = function(){
    var hasElement = document.getElementById('someId');
    alert(hasElement);
}
</script>
<div id="someId">true</div>
<script>
$(document).ready(function(){
    var hasElement = $('#someId');
    alert(hasElement);
});
</script>
<div id="someId">true</div>