簡體   English   中英

外部Javascript文件如何影響HTML文件的DOM?

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

通過三種方式:

  1. 在您的內容之后導入js文件。
  2. 使用window.onload = function(){...}
  3. document.addEventListener('DOMContentLoaded',function(){...}

這樣就可以找到該元素。

如果需要在所有元素加載后執行更改,為什么不使用簡單的JQuery函數。

$(document).ready (function (){ Document.getElementByID('tim').innerHTML = "changed text"; 
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM