我一直在尝试使用document.getElementByID
从外部 JS 文件中的 HTML 文件中提取信息,但它似乎不起作用。document.getElementByID
如果它与 HTML 文件内联,或者它可以在外部 JS 文件上正常工作,是否唯一有效?由于其他功能正在工作,因此在 HTML 文档中正确调用了 JS 文件。
5 回答
首先,确保您使用的是document.getElementById("xxx")
,而不是document.getElementByID("xxx")
(注意最后的大小写差异)。您的问题指的是document.getElementByID("xxx")
这可能是这里的问题。
其次,您必须确保在浏览器解析相关 DOM 项之后执行该函数。如果您将document.getElementById
JS 文件放入该部分中加载并在加载后立即执行的外部 JS 文件中<head>
,则 DOM 尚未准备好。
你有几个选择:
1)将外部 JS 文件<script>
标签放在正文的末尾,就在</body>
标签之前。这不仅会更快地加载/显示您的页面,而且会保证在该 JS 文件中的任何内容可以运行之前解析 DOM。
<body>
Your HTML here
<script type="text/javascript" src="myscript.js"></script>
</body>
2)既然你有 jQuery,把你立即执行的代码放在一个$(document).ready(fn)
块中,这样 jQuery 会阻止执行,直到 DOM 准备好。如果你这样做,那么你可以把你的代码放在任何地方(<head>
如果你愿意,包括在这个部分中)。
$(document).ready(function() {
// put your page initialization code here
});
3)将您的代码放在您想要的任何地方,但不要立即执行任何代码。相反,将所有初始化代码放在一个初始化函数中(我们称它为myPageInit()
您调用的函数:
$(document).ready(myPageInit);
4)将您的代码放在您想要的任何地方,但不要立即执行任何代码。相反,将所有初始化代码放在一个初始化函数中(让我们称它为myPageInit()
您在标记之前从脚本调用的</body>
代码:
<script type="text/javascript">myPageInit()</script>
document.getElementByID 是否仅在与 HTML 文件内联时才有效
不。
它可以在外部 JS 文件上正常工作吗?
是的。
您可能document.getElementById()
在 DOM 准备好之前调用。
我的建议是这样做:
window.onload = function () {
// document.getElementById() code here
}
然后document.getElementById()
,直到页面上的每个元素都已完全加载,您才会执行。
如果您将脚本放入其中,<head>
则主体尚未加载,因此元素不存在。
要么使用 jQuery 的函数推迟脚本,要么将脚本放在正文的末尾。
window.onload = function() {
document.getElementById("demo").innerHTML = "My First JavaScript";
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>js in ts</title>
<script src="app.js"></script>
</head>
<body>
<h2>JavaScript in Body</h2>
<p id="demo"></p>
</body>
</html>