不完全是您所要求的,但另一种解决方案是将您的脚本仅包含在正文的末尾,就在结束</body>
标记之前。这将获得相同的结果,甚至不需要包含 jQuery 的精简版本。
document.ready 函数的要点是,它将在 DOM 准备好之后调用,即在浏览器解析完所有 html 并准备好从 JavaScript 操作之后。将你的 JS 代码放在 body 的末尾可以达到同样的效果,因为浏览器在解析文档时会执行 JavaScript,并且在执行 JS 时它可以访问任何已经解析过的 DOM 元素。
当我在评论中提到这个想法时,你问你的代码将如何执行,所以这里有一个简单的例子:
// CHANGE THE FOLLOWING:
$(document).ready(function() {
var myField = document.getElementById("someId");
alert(myField.value);
});
// TO BE
var myField = document.getElementById("someId");
alert(myField.value);
上面的内容是内联(尽管在脚本块中)还是包含在脚本标记所包含的外部 JS 文件中并不重要,只要它位于正文的末尾即可。
唯一的问题是,因为代码不包含在函数中,所以它将创建全局变量 - 作为一般规则,您要避免,因为如果将来您要包含其他外部库,他们可能会尝试使用相同的名字。您可以通过将代码包装在立即调用的匿名函数表达式中来避免此问题:
(function() {
var x = "these variables are not global",
myField = document.getElementById("someId");
alert(myField.value);
function test() {
alert("this function isn't global either");
}
test();
})();
请注意额外的括号 - 匿名函数周围的括号使其成为函数表达式而不是函数声明(这意味着它不需要名称),最后的括号导致函数立即被调用。
您可以通过查看您现在正在阅读的 Stack Overflow 页面上的页面源代码来查看将 JS 放在正文末尾的真实示例。