如何在DOM元素加载完毕后执行js代码以及DOM加载过程

最近在写一个动态菜单。即,根据用户角色权限生成菜单选项。动态菜单采用js进行html代码拼接,再append到相应的节点。但是存在一个问题,就是菜单功能的js代码会在DOM元素加载完成之前执行,也就是菜单生成之前执行,所以所有绑定的菜单点击事件都不能执行。

认识DOM和DOM加载过程以及如何让DOM加载完成后再执行js脚本文件

<b>DOM加载过程:</b>
网页文档加载都是按顺序执行的。一般浏览器渲染操作顺序大致是一下几个步骤:
1.解析HTML结构
2.加载外部脚本和样式表文件
3.解析并执行脚本代码
4.构造HTML DOM模型
5.加载图片等外部文件
6.页面加载完毕

从以上顺序可以看出,js等脚本会在DOM文档构造之前执行,这样js就无法访问DOM文档对象模型。所以一般把可执行脚本放在页面初始化事件处理函数中,这样能确保文档加载完毕后再执行脚本。所以我们一般这样写:
window.onload = function(){//执行脚本}
window.onload表示页面加载完了后(包括dom和js)

img_f78bbe8216b1bb9be74eeaa356b1cd01.png
window.onload = function(){//执行脚本}

这样的话,这段js代码将会在DOM元素加载完毕之后进行菜单点击事件的绑定。

这个问题调试了很久很久,最后一行代码就解决了。233...
代码真是需要多写,多累积经验。感触太深了。QAQ

window.onload大法好啊!

6-1

谈谈document.ready和window.onload的区别

在Jquery里面,我们可以看到两种写法:$(function(){}) 和$(document).ready(function(){})

这两个方法的效果都是一样的,都是在dom文档树加载完之后执行一个函数(注意,这里面的文档树加载完不代表全部文件加载完)。

而window.onload是在dom文档树加载完和所有文件加载完之后执行一个函数。也就是说$(document).ready要比window.onload先执行。

原文地址:谈谈document.ready和window.onload的区别

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以在文档的 `</body>` 标签之前放置脚本代码,或者使用 `window.onload` 事件监听器。 例如,以下是在文档加载完毕执行函数 `myFunction` 的示例代码: ```html <body> <!-- 页面内容 --> <script> window.onload = function() { myFunction(); } </script> </body> ``` 或者,也可以使用 `addEventListener` 方法来添加事件监听器: ```html <body> <!-- 页面内容 --> <script> window.addEventListener('load', myFunction); </script> </body> ``` 也可以使用 `defer` 属性,这将告诉浏览器在文档完全解析之后再执行脚本。 ```html <body> <!-- 页面内容 --> <script defer src="myScript.js"></script> </body> ``` 注意,`defer` 属性仅适用于外部脚本文件。 ### 回答2: 在HTML中,我们可以使用`defer`属性和`DOMContentLoaded`事件来确保整个文档加载完毕后再执行脚本。 1. 使用`defer`属性:将脚本标签放置在`<head></head>`标签内,并将`defer`属性添加到脚本标签中。这样,脚本将会在文档解析完毕后再执行,而不会中断HTML的加载和解析。示例代码如下: ```html <!DOCTYPE html> <html> <head> <script defer src="script.js"></script> </head> <body> <!--其他HTML内容--> </body> </html> ``` 2. 使用`DOMContentLoaded`事件:将脚本标签放置在`<body></body>`标签内,并添加`DOMContentLoaded`事件监听器来执行脚本。这样,在整个DOM树构建完成后,浏览器会触发`DOMContentLoaded`事件,然后执行脚本。示例代码如下: ```html <!DOCTYPE html> <html> <head></head> <body> <!--其他HTML内容--> <script> document.addEventListener("DOMContentLoaded", function(event) { // 在这里执行脚本 }); </script> </body> </html> ``` 无论使用哪种方法,我们都可以确保脚本在整个文档加载完毕后才执行,避免脚本执行时依赖的HTML元素还未被解析导致错误。 ### 回答3: 在HTML中,可以使用以下方法来确保整个文档加载完毕后再执行脚本。 1. 使用window.onload事件:可以将需要执行的脚本代码放在window.onload事件的回调函数中。当整个文档加载完毕时,该事件会触发,从而执行脚本代码。例如: ```html <script> window.onload = function() { // 在这里放置需要执行的脚本代码 } </script> ``` 2. 使用defer属性:在script标签中添加defer属性可以告诉浏览器推迟执行脚本,直到文档加载完毕执行。例如: ```html <script src="script.js" defer></script> ``` 3. 使用async属性:在script标签中添加async属性可以告诉浏览器异步加载脚本,不会阻塞文档的加载,但是脚本的执行顺序可能会被打乱。例如: ```html <script src="script.js" async></script> ``` 需要注意的是,defer和async属性只适用于外部脚本文件,而不适用于内联脚本。 无论是使用window.onload事件、defer属性还是async属性,都可以确保脚本在整个文档加载完毕后再执行,以避免脚本执行时可能出现的依赖问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值