当你把Javascript语言,身体,头部和在使用时doc.load什么时候? [重复](Whe

2019-07-18 05:35发布

可能重复:
凡将JavaScript的HTML文件?
我应该在身体或html的头写剧本?

我一直在想,这主要是因为在创建页面时,我总是遇到麻烦,基于以下的事情:

当你写你的JavaScript

  • <head>
  • <body>
  • $(document).ready()

我可能是愚蠢的,但是当我的JavaScript(/ jQuery的),因为错误的地方或者是或否的未执行我有几次doc.ready()命令。 所以,我真的不知道这样。

这同样适用于jQuery和“变种”命令

Answer 1:

$(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文档本身。



Answer 2:

通过现代的“最佳实践”,是这样的:

  • 把脚本中<head>当页面开始被渲染,才应该发生。 的比方HTML 5垫片库或Modernizr的。
  • 把脚本中的“准备”处理时,有过脚本是如何导入有限的控制。 像公用事业东西可以包含在页面上悄悄地添加功能一般采用“准备就绪”的处理程序,因为他们不能确定的,他们将如何使用。
  • 把脚本在结束<body>如果你能在所有其他情况下摆脱它。

有时候,你最终在需要的东西,否则你想在body元素的结束加载网页的相关性。 这是一个不理想的情况,但如果你无法避免这一点,可以迫使脚本在被加载<head>而不是在结束<body>

这是很好的在文件的结尾,因为浏览器评估的内容加载的东西<script>标记,当他们加载它们。 (有一些“现代”的方式来避免这种情况,但这是进入更复杂的领域。)

何时使用“准备”处理(或“装载”处理程序,对于这个问题)的决定是不是在哪里放的决定有点不同<script>标记。 如果你有从服务器端模板系统生成(不可取的,但你能做些什么?)页内的小部件,例如jQuery的引用,那么你需要在页面的顶部导入jQuery的,即使其他代码可以按照初始化“准备”处理程序。 也就是说,有关何时使用“现成”的决定与你的脚本是否愿意依靠进口到一个页面在合适的点做,或者如果它想确保正确的事情发生,无论在哪里其<script>标签被放置。



Answer 3:

这是当你需要的代码被执行的问题。

如果你要操作DOM树(如移动体周围/显示,隐藏等),你把你的代码在文档的头部,你的元素不会在那里执行代码时,因此您的代码将无法正常工作。

在这种情况下,你可以把你的代码在文档的头部和调用它在文档DOM准备就绪,以$(document).ready()

在文档的末尾把代码很少是必要的,有一次我能想到的是谷歌加+1按钮,这需要你把脚本的最后+1按钮后,所以你只要坚持到您的文档的末尾为了确定。



文章来源: When do you put Javascript in body, when in head and when use doc.load? [duplicate]