![](/img/trans.png)
[英]is there a difference between putting a javascript in the head or in the body?
[英]What's the difference between putting script in head and body?
我遇到了问题。
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script type="text/javascript">
alert(document.getElementsByTagName("li").length);
</script>
<title>purchase list</title>
</head>
<body>
<h1>What to buy</h1>
<ul id="purchases">
<li> beans</li>
<li>Cheese</li>
</ul>
</body>
当我将脚本放在头中时,结果显示为 0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Shopping list</title>
</head>
<body>
<h1>What to buy</h1>
<ul id="purchases">
<li>Cheese</li>
<li>Milk</li>
<script type="text/javascript">
alert(document.getElementsByTagName("li").length);
</script>
</ul>
</body>
当我尝试将脚本放入正文时,结果显示 2. 为什么会有这样的差异? 主要区别是什么?
将脚本放入 head 和 body 有什么区别?
它运行的时间。
当我把脚本放在头里时,结果显示 0 购物清单
当脚本运行时,您尝试访问的元素不存在(因为它们出现在文档中的脚本之后)。
请注意,您可以编写一个脚本,这样的功能是后来被称为(为以后包括“当整个文件已加载”不同的值)使用的事件处理程序。
很简单,JavaScript 会自上而下,除非你告诉它做其他事情。 当它到达 li 元素时,JavaScript 代码已经完成。
但是,如果您想将其保留在头脑中,则可以使用 document.ready 函数,它只会在加载 HTML 之后加载。
Head 将在 Body 之前渲染。 如果您尝试访问头部中的li
标签,显而易见的答案是它们在浏览器呈现正文部分之前不会创建,因此无法被引用。
因为当你在头脑中调用它时,li 还不存在(就 DOM 而言) – F4r-20 1 分钟前
这是对的。 但是,试试这个:
<head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <script type="text/javascript"> window.onload = function(){ alert(document.getElementsByTagName("li").length); } </script> <title>purchase list</title> </head> <body> <h1>What to buy</h1> <ul id="purchases"> <li> beans</li> <li>Cheese</li> </ul> </body>
当脚本包含在头部时,它们会在页面内容之前加载或运行。 当您将它们包含在正文中时,它们会在前面的 html 之后加载或运行。 将脚本尽可能靠近正文的末尾通常是一种很好的做法。
你打电话的时候:
alert(document.getElementsByTagName("li").length);
您想要获取尚不存在的元素。 因为 head 是加载页面时首先运行的东西。
它正在搜索li
元素,但是当头部加载时它还不存在。
你必须把它放在正文中,因为那样的话,列表项就存在了。 那么它的工作原理。
通常脚本和 CSS 文件必须放入 head 中,这是一种很好的做法。
有关何时放入 head 和 body 标签的更多详细信息,请参阅此链接 -我应该将 CSS 和 Javascript 代码放在 HTML 网页中的何处? &我应该在正文中还是在 html 的头部编写脚本?
如果你把脚本放在 head 中,javascript 代码甚至在 body 标签中的控件被呈现之前就会被执行。 因此,如果您想将脚本保留在 head 标记中,请确保在 onload 完成后执行它们。 下面是一个例子:
<script type="text/javascript">
function MyFunction() {
alert(document.getElementsByTagName("li").length);
}
window.onload = MyFunction;
</script>
以下代码执行 head 标签中的脚本。 一次没有使用 JQuery,然后使用 JQuery 指示在加载文档时显示警报$(document).reaady()
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script src="jquery-3.5.1.min.js"></script>
<script type="text/javascript">
// First alert will show # of opttions as 0, because the document is not ready yet
alert(document.getElementsByTagName("li").length);
// First alert will show the correct # of opttions as 2
$(document).ready(function () {
alert(document.getElementsByTagName("li").length);
});
</script>
<title>purchase list</title>
</head>
<body>
<h1>What to buy</h1>
<ul id="purchases">
<li>beans</li>
<li>Cheese</li>
</ul>
</body>
HTML 文档以自上而下的方式执行。
就您而言,当您执行 HTML 文档时,它将首先执行 head。 正如你所看到的,你在头部内部写了一个脚本标签。
因此,这里将首先执行脚本标记。 在脚本标签中,您将要执行的操作是找到 body 标签内可用的 li 标签的长度。
但此时,浏览器还没有执行 body 标签。
因此,您的脚本将获得 0 作为结果。
警报(document.getElementsByTagName(“li”)。长度);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.