可能重复:
凡将JavaScript的HTML文件?
我应该在身体或html的头写剧本?
我一直在想,这主要是因为在创建页面时,我总是遇到麻烦,基于以下的事情:
当你写你的JavaScript
- 在
<head>
- 在
<body>
- 用
$(document).ready()
我可能是愚蠢的,但是当我的JavaScript(/ jQuery的),因为错误的地方或者是或否的未执行我有几次doc.ready()
命令。 所以,我真的不知道这样。
这同样适用于jQuery和“变种”命令
$(document).ready()
只是确保加载你的JavaScript之前,所有的DOM元素被加载。
当不要紧
无需等待该事件,火灾,你可能最终操纵DOM元素或样式尚未在页面上存在。 在DOM准备的事件,您还可以更灵活地运行在页面的不同部分的脚本。 例如:
<div id="map"></div>
<script type="text/javascript">document.getElementById('map').style.opacity = 0;</script>
将运行,因为脚本运行之前地图div已被加载。 事实上,你可以得到一些不错的性能提升在页面的底部,把你的脚本。
当这非常重要
但是,如果要加载的脚本<head>
元素,大部分的DOM还没有加载。 这个例子将不能工作:
<script type="text/javascript">document.getElementById('map').style.opacity = 0;</script>
<div id="map"></div>
不会的,因为地图的div尚未加载。
一个安全的解决方案
您可以通过简单地避免这种等到整个DOM加载:
<script type="text/javascript">$(document).ready(function () {
document.getElementById('map').style.opacity = 0;
});
</script>
<div id="map"></div>
有很多文章可以解释这一点,还有jQuery文档本身。
通过现代的“最佳实践”,是这样的:
- 把脚本中
<head>
当页面开始被渲染,才应该发生。 的比方HTML 5垫片库或Modernizr的。 - 把脚本中的“准备”处理时,有过脚本是如何导入有限的控制。 像公用事业东西可以包含在页面上悄悄地添加功能一般采用“准备就绪”的处理程序,因为他们不能确定的,他们将如何使用。
- 把脚本在结束
<body>
如果你能在所有其他情况下摆脱它。
有时候,你最终在需要的东西,否则你想在body元素的结束加载网页的相关性。 这是一个不理想的情况,但如果你无法避免这一点,可以迫使脚本在被加载<head>
而不是在结束<body>
这是很好的在文件的结尾,因为浏览器评估的内容加载的东西<script>
标记,当他们加载它们。 (有一些“现代”的方式来避免这种情况,但这是进入更复杂的领域。)
何时使用“准备”处理(或“装载”处理程序,对于这个问题)的决定是不是在哪里放的决定有点不同<script>
标记。 如果你有从服务器端模板系统生成(不可取的,但你能做些什么?)页内的小部件,例如jQuery的引用,那么你需要在页面的顶部导入jQuery的,即使其他代码可以按照初始化“准备”处理程序。 也就是说,有关何时使用“现成”的决定与你的脚本是否愿意依靠进口到一个页面在合适的点做,或者如果它想确保正确的事情发生,无论在哪里其<script>
标签被放置。
这是当你需要的代码被执行的问题。
如果你要操作DOM树(如移动体周围/显示,隐藏等),你把你的代码在文档的头部,你的元素不会在那里执行代码时,因此您的代码将无法正常工作。
在这种情况下,你可以把你的代码在文档的头部和调用它在文档DOM准备就绪,以$(document).ready()
在文档的末尾把代码很少是必要的,有一次我能想到的是谷歌加+1按钮,这需要你把脚本的最后+1按钮后,所以你只要坚持到您的文档的末尾为了确定。
文章来源: When do you put Javascript in body, when in head and when use doc.load? [duplicate]