簡體   English   中英

如何訪問外部JavaScript文件中的DOM對象?

[英]How can I access DOM objects in an external JavaScript file?

我正在使用外部JavaScript文件來訪問文檔中的DOM對象。 問題是,如果jQuery是外部加載的文件,則它似乎無權訪問。 我的代碼如下:

<html>
    <head>
    </head>

    <body>
        <div id="domToChange" someAttribute="hi"></div>
        <script src="officialJqueryLibrary"></script>
        <script src="myJS.js"></script>
    </body>
</html>

///////// myJS.js file

// Returns undefined
$('#domToChange').attr('someAttribute');

從外部加載JavaScript文件時,DOM選擇器似乎找不到我的div。 但是,當我將其放置在HTML文檔本身中時,一切正常。 如何授予DOM訪問我的JavaScript文件的權限?

您必須封裝如下代碼:

$(function(){
     $('#domToChange').attr('someAttribute');
});

以便在DOM准備就緒時執行代碼。

您應該將所有與DOM相關的代碼包裝到

$(function() {
    //Code
});

然后,當DOM完全加載時,將執行代碼。

嘗試獲取屬性的值,如下所示:

$('#domToChange').attr('someattribute');
//or
$('#domToChange').attr('someAttribute'); // i know you've tried this, but pls check demo

演示在這里 在我的機器上,瀏覽器Chrome版本28.0.1500.95 m,它運行良好。

好的,這是一件偶然的事情(但我相信這是一個准確的解釋),但真正的解釋卻在這里。

您需要了解jQuery是已初始化的對象 因此,jQuery對象需要花費一些時間來初始化。 就像說的那樣

區分jQuery對象和本機DOM元素非常重要。 本機DOM方法和屬性不在jQuery對象上,反之亦然。

因此,不必在初始化DOM的同時初始化jQuery對象。

另外,所有傳遞的腳本都具有defer屬性。 這主要取決於瀏覽器。

就像說的那樣

設置時,此布爾屬性向用戶代理提供一個提示,即腳本將不會生成任何文檔內容(例如,javascript中沒有“ document.write”),因此,用戶代理可以繼續解析和呈現。

而且有時可能會延遲腳本的執行。 因此,根據不同的人會有不同的結果。

暫無
暫無

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

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