2012-04-06 90 views
4

我一直在嘗試使用document.getElementByID從外部JS文件的HTML文件中提取信息,但似乎沒有工作。如果document.getElementByID僅與HTML文件內聯,或者它可以在外部JS文件上正常工作,那麼document.getElementByID才能正常工作嗎? JS文件在HTML文檔中被正確調用,因爲其他函數正在工作。document.getElementByID是外部還是內聯?

+0

它應該是雙向的工作..你試圖找到使用jQuery代替的document.getElementById,看看是否有任何區別的對象? – pollirrata 2012-04-06 19:05:36

+0

請確保您使用getElementById(注意小寫的d結尾),而不是getElementByID。 – j08691 2012-04-06 19:07:48

+0

發佈你的HTML以及你如何調用你的js文件 – DG3 2012-04-06 19:09:54

回答

11

是否唯一的document.getElementById工作,如果它是內嵌在HTML文件

可以在一個外部JS文件正常工作?

是的。

在DOM準備就緒之前,您可能會調用document.getElementById()

+0

我在DOM準備好之前調用它。謝謝! – 2012-04-11 05:43:53

2

如果您將腳本放在<head>中,那麼主體尚未加載,因此元素不在那裏。

通過使用jQuery的函數推遲腳本,或將腳本放在主體的末尾。

8

首先,確保您使用的是document.getElementById("xxx"),而不是document.getElementByID("xxx")(注意最後的大寫差異)。你的問題是指document.getElementByID("xxx"),所以這可能是問題在這裏。

其次,您必須確保在瀏覽器解析了相關DOM項後,才能執行此功能。如果您將document.getElementById放入裝入<head>部分的外部JS文件中,並在加載後立即執行,則該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)把你的代碼,任何你想要的,但沒有任何的它立即執行。相反,把在intialization功能,所有的初始化代碼(我們稱之爲您從調用myPageInit()

$(document).ready(myPageInit); 

4)把你的代碼,你想要的任何地方,但沒有任何的它立即執行。相反,把你所有的初始化代碼在intialization功能(我們稱之爲你的的</body>標籤與在此之前直接從腳本調用myPageInit()

<script type="text/javascript">myPageInit()</script> 
+0

我有兩個問題給你,先生: 1.爲什麼會要求使用'getElementById'如果他有jQuery? 2.爲什麼不'window.onload = function(){// Todo};'? – Dementic 2012-08-25 23:46:39

+0

'getElementById()'實際上比jQuery快一點,如果你想要的只是一個DOM元素。我不知道爲什麼OP不使用jQuery。至於你的第二個問題,'window.onload()'在所有圖像加載後發生。 'DOM(document).ready()'發生在DOM準備就緒之前所有的圖像加載完畢,所以它會更快發生,最好是如果你不需要等待所有圖像完成加載。 – jfriend00 2012-08-26 00:00:12

+0

jquery的id選擇器正是'document.getElementById',並且爲什麼不使用jquery,好吧,我和我的同事正在從一個模板構建網站,他使用jquery,而我不這樣做。他的網站代碼大約30kb(不包括jquery依賴),而我的總共15kb。 – Dementic 2012-08-26 00:31:03

2

我的建議是這樣:

window.onload = function() { 
// document.getElementById() code here 
} 

那麼你document.getElementById()不會執行,直到每個頁面上的元素已滿載。

相關問題