我一直想知道,主要是因为在创建页面时我总是遇到麻烦,基于以下几点:
你什么时候写你的javascript
- 在里面
<head>
- 在里面
<body>
- 与
$(document).ready()
我可能很愚蠢,但我有几次因为错误的位置或是或否doc.ready()
命令而没有执行我的 JavaScript (/jQuery)。所以我真的很想知道。
jQuery 和 'var' 命令也是如此
我一直想知道,主要是因为在创建页面时我总是遇到麻烦,基于以下几点:
你什么时候写你的javascript
<head>
<body>
$(document).ready()
我可能很愚蠢,但我有几次因为错误的位置或是或否doc.ready()
命令而没有执行我的 JavaScript (/jQuery)。所以我真的很想知道。
jQuery 和 'var' 命令也是如此
$(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>
通过现代“最佳实践”,它是这样的:
<head>
在页面开始呈现之前将脚本放在它们应该发生的时间。例如 HTML 5 shim 库或 Modernizr。<body>
如果您在所有其他情况下都可以摆脱它,请将脚本放在末尾。有时,您最终会在页面中产生依赖项,这些依赖项需要您希望在 body 元素末尾加载的内容。这是一个不受欢迎的情况,但如果你无法避免它可能会强制将脚本加载到 .<head>
而不是<body>
.
最好在文档末尾加载内容,因为浏览器<script>
在加载标签时会评估它们的内容。(有一些“现代”方法可以避免这种情况,但这进入了更复杂的领域。)
何时使用“就绪”处理程序(或“加载”处理程序,就此而言)的决定与关于放置<script>
标签的位置的决定略有不同。如果你有来自服务器端模板系统的页面内小部件生成(不受欢迎,但你能做什么?)例如 jQuery 引用,那么你需要在页面顶部导入 jQuery,即使其他代码可能会将初始化推迟到“就绪”处理程序。也就是说,关于何时使用“就绪”的决定与您的脚本是否愿意依赖于在正确的位置被导入到页面中,或者是否要确保无论在哪里都发生正确的事情有关它的<script>
标签被放置。
这是您何时需要执行代码的问题。
如果您要操作 DOM 树(例如移动元素/显示隐藏等)并且将代码放在文档的头部,则在执行代码时您的元素将不存在,因此您的代码将无法工作.
在这种情况下,您可以将代码放在文档的头部,并在文档 DOM 准备好时调用它,使用$(document).ready()
很少需要将代码放在文档末尾,我能想到的一种情况是 google plus +1 按钮,这需要您在最后一个 +1 按钮之后放置脚本,因此您只需将其粘贴到文档末尾为了确定。