0

我正在使用外部 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 文件?

4

4 回答 4

0

好的,这是一个偶然的事情(但我相信这是一个准确的解释),但它为什么发生的真正解释就在这里。

您需要了解jQuery 是一个已初始化的对象。所以 jQuery 对象需要时间来初始化。正如它所说,

区分 jQuery 对象和原生 DOM 元素非常重要。jQuery 对象上不存在原生 DOM 方法和属性,反之亦然。

所以没有必要在初始化DOM的同时初始化 jQuery 对象。

此外,所有传递的脚本都有一个defer属性。这主要取决于浏览器。

正如它所说,

设置后,此布尔属性向用户代理提供脚本不会生成任何文档内容的提示(例如,在 javascript 中没有“document.write”),因此,用户代理可以继续解析和呈现。

它有时会延迟脚本的执行。所以不同的人会有不同的结果。

于 2013-08-15T00:26:19.567 回答
0

尝试获取您的属性的值,如下所示:

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

演示在这里。在我的机器上,浏览器 Chrome 版本 28.0.1500.95 m,它运行良好。

于 2013-08-14T22:59:13.483 回答
0

您必须像这样附上代码:

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

以便在 DOM 准备好时执行代码。

于 2013-08-14T22:43:54.547 回答
0

您应该将所有与 DOM 相关的代码包装到

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

然后在 DOM 完全加载时执行代码。

于 2013-08-14T22:44:11.480 回答