[英]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.