我正在使用外部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文档本身时,一切都有效。如何为我的JavaScript文件提供DOM访问权限?
答案 0 :(得分:0)
你必须像这样附上代码:
$(function(){
$('#domToChange').attr('someAttribute');
});
这样在DOM准备就绪时执行代码。
答案 1 :(得分:0)
您应该将所有与DOM相关的代码包装到
中$(function() {
//Code
});
然后在DOM完全加载时执行代码。
答案 2 :(得分:0)
尝试获取属性的值,如下所示:
$('#domToChange').attr('someattribute');
//or
$('#domToChange').attr('someAttribute'); // i know you've tried this, but pls check demo
演示here。在我的机器上,浏览器Chrome版本为28.0.1500.95 m,它运行正常。
答案 3 :(得分:0)
好的,这是一种轻而易举的事情(但我认为这是一个准确的解释),但真实的解释为什么会发生就在这里。
您需要了解 jQuery是一个初始化的对象。所以jQuery对象需要时间来启动。正如它所说,
对于区分jQuery对象和本机DOM元素非常重要。 jQuery对象上不存在本机DOM方法和属性,反之亦然。
因此,在DOM初始化的同时,jQuery对象不必初始化。
此外,所有传递的脚本都具有defer
属性。这主要取决于浏览器。
正如它所说,
设置时,此布尔属性向用户代理提供脚本不会生成任何文档内容的提示(例如,javascript中没有“document.write”),因此,用户代理可以继续解析和呈现
它有时会延迟脚本的执行。因此根据不同的人不同的结果。