要搞清楚这个问题,你必须理解JavaScript如何得到包括来自外部资源的页面,浏览器如何构建DOM上。
当包括两个脚本标记:
<script src="jquery.js"></script>
<script src="foo.js"></script>
首先是下载并执行,那么第二个被下载并执行。如果在第一个脚本中定义了一个属性,例如window.hello
,则可以在第二个脚本中访问它,因为第二个脚本会在第一个脚本完成之后下载并执行。如果脚本以其他顺序运行,则该属性将不可用。
只要将代码包含在头部vs正文中,就必须考虑代码执行时相对于浏览器解析html并创建DOM。浏览器从头到尾读取html,因此,当它到达头部的脚本标记时,主体节点还不存在。这就是为什么你的代码不能工作的原因。为了使它工作在头上,你必须以某种方式告诉你的代码等到元素存在。要解决这种情况最常见的方法是使用DOMContentLoaded的事件,你可以绑定到同:
$(document).ready(function(){
// my code here
});
您也可以使用窗口加载事件。
$(window).on("load",function(){
// my code here
})
这是更好地使用DOMContentLoaded除非你的代码需要获得元素的宽度或高度,因为它会发生更早。
第三个选择是使用事件委托,但它确实不适合您的用例。
$(document).on('click','#paragraph',function() {
$('#paragraph').hide();
});
这通常是一个更好的主意,有结束标记之前你的JavaScript,但它往往不是很容易与许多MVC和CMS系统来这样做的。
所以你通过CDN加载“hide.js”?什么是“本地js”呢? –
@ChrisHardie本地js是上面定义的。我将使用CDN作为其他功能。 –
本地JS = hide.js对此感到抱歉 –