#!关于$(document).ready()
和脚本位置的问题,这是一个常见的JavaScript/jQuery开发中的关键概念。以下是完整的解答:
$(document).ready()
这是jQuery提供的函数,用于在DOM完全加载后(但不必等待图片等外部资源加载完成)执行代码。等效于原生JS的DOMContentLoaded
事件。<script>
标签在HTML文档中的放置位置(如<head>
或<body>
末尾),会影响脚本的执行时机和DOM访问能力。| 特性 | $(document).ready()
| 直接放置脚本(无ready) |
|---------------------|-----------------------------------------------|--------------------------------------|
| 执行时机 | DOM解析完成后立即执行 | 取决于脚本位置(可能阻塞渲染) |
| 资源依赖 | 不等待图片/样式表加载 | 无特殊控制 |
| 多次调用 | 可安全重复调用(按声明顺序执行) | 可能因DOM未就绪报错 |
| 兼容性 | 跨浏览器统一处理 | 需自行处理DOM加载事件 |
<head>
中放置脚本<head>
中放置脚本async/defer
)<body>
末尾放置脚本<body>
末尾放置脚本原因:jQuery库未加载或加载顺序错误 解决:
<!-- 正确顺序 -->
<script src="jquery.js"></script>
<script>
$(document).ready(...);
</script>
原因:元素尚未加载时尝试绑定 解决:
// 方案1:使用ready()
$(document).ready(function() {
$("#button").click(...);
});
// 方案2:事件委托
$(document).on("click", "#button", ...);
建议:
ready()
回调ready()
的情况<head>
中时ready()
的情况</body>
前希望这些信息能帮助你全面理解两者的区别和使用场景!