[英]How can an external Javascript file affect an HTML file's DOM?
假设我们的HTML文件具有以下代码:
<html>
<head>
<script src="totti.js"></script>
</head>
<body>
<span id="tim">this'll change on load</span>
</body>
</html>
而且由于我不知道该怎么做,这是我要实现的代码(例如totti.js):
function changeText(){
document.getElementById("tim").innerHTML = "changed text";
}
changeText();
我想我们需要先将其id定义为变量,或者将其作为HTML方面的论据传递? 帮助将不胜感激。 谢谢。
您的代码是正确的,但是,如果将脚本放在head
标记内,则该脚本将在加载文档之前执行,因此它将不起作用(此时id tim
的元素尚不存在)。
要解决此问题,您可以将script标记放在要修改的元素之后(或在body
标记的底部),如下所示:
<html>
<head>
</head>
<body>
<span id="tim">this'll change on load</span>
<script src="totti.js"></script>
</body>
</html>
或者,您可以使函数在文档加载后立即运行,如下所示:
<html>
<head>
<script src="totti.js"></script>
</head>
<body onload="changeText()">
<span id="tim">this'll change on load</span>
</body>
</html>
在这种情况下,请从totti.js中删除changeText()
行。
您快到了,这是正确的方法。 但是,您的Javascript是在呈现“ tim”元素之前加载并执行的,因此找不到它。
将代码包装在加载所有DOM元素后触发的事件中:
document.addEventListener('DOMContentLoaded', function(){
changeText();
});
function changeText(){
document.getElementById("tim").innerHTML = "changed text";
}
请注意,该函数本身不在事件回调内部,因此在加载JavaScript时会立即注册该函数。 仅实际调用changeText()
函数取决于DOM。
问题:
您甚至在创建document.getElementById("tim")
之前,使用document.getElementById("tim")
访问dom元素。
有两种方法可以解决您的问题:
1.将script
-tag移至body
-tag的末尾:
<html>
<head>
</head>
<body>
<span id="tim">this'll change on load</span>
<script src="totti.js"></script>
</body>
</html>
2.使用onload
:
<html>
<head>
<script src="totti.js"></script>
</head>
<body onload="changeText()">
<span id="tim">this'll change on load</span>
</body>
</html>
通过三种方式:
这样就可以找到该元素。
如果需要在所有元素加载后执行更改,为什么不使用简单的JQuery函数。
$(document).ready (function (){ Document.getElementByID('tim').innerHTML = "changed text";
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.