JavaScript程序顺序执行导致的HTML标签无法引用
2016-10-27 09:02
423 查看
在用JavaScript对HTML文档中标签进行操作时,有时会出现对文档中标签无法引用的问题.比如:
图1
图1中,变量e1和e2分别对id为"element"的p标签进行引用,但实际运行时会出现下述问题,如图2所示:
图2
图2中, e1变量未引用到目标标签,而e2标签引用到了目标标签.
那么,这类问题如何解决呢?主要有两种解决方法
第1种,把引用变量的script标签放到待引用目标标签后(见图1的e2引用部分);
第2种,为window对象添加'load'事件的监听器,如图3所示.
图3
运行结果如图4所示.
图4
图3中,由于为window对象添加了'load'事件的监听器,
指定了在HTML文档载入(load)后调用eventWindowLoaded函数.于是,在图4的运行结果中,e1引用到了id为"element"的元素,实现了正常引用.而e2部分的script标签在id为"element"的标签后,所以仍然能够实现正常引用.
但这里需要特别注意的是,e2的引用是先于e1的引用的,这是为什么呢?如果按照JavaScript程序顺序执行的特点,e1部分代码本身在e2部分代码的上面,肯定应该先于执行,可控制台的记录结果为什么是反的呢?这其中的原因主要是由于e2部分script标签嵌入到body标签,所以作为了HTML文档的一部分共同载入(load).而当HTML载入("load")事件,
即window对象载入完成后,才会调用e1部分的eventWindowLoaded监听函数.
有兴趣的可以把e2部分scipt标签与id为"element"的p标签更换下上下位置,再看看效果.
下面是完整代码:
图1
图1中,变量e1和e2分别对id为"element"的p标签进行引用,但实际运行时会出现下述问题,如图2所示:
图2
图2中, e1变量未引用到目标标签,而e2标签引用到了目标标签.
那么,这类问题如何解决呢?主要有两种解决方法
第1种,把引用变量的script标签放到待引用目标标签后(见图1的e2引用部分);
第2种,为window对象添加'load'事件的监听器,如图3所示.
图3
运行结果如图4所示.
图4
图3中,由于为window对象添加了'load'事件的监听器,
指定了在HTML文档载入(load)后调用eventWindowLoaded函数.于是,在图4的运行结果中,e1引用到了id为"element"的元素,实现了正常引用.而e2部分的script标签在id为"element"的标签后,所以仍然能够实现正常引用.
但这里需要特别注意的是,e2的引用是先于e1的引用的,这是为什么呢?如果按照JavaScript程序顺序执行的特点,e1部分代码本身在e2部分代码的上面,肯定应该先于执行,可控制台的记录结果为什么是反的呢?这其中的原因主要是由于e2部分script标签嵌入到body标签,所以作为了HTML文档的一部分共同载入(load).而当HTML载入("load")事件,
即window对象载入完成后,才会调用e1部分的eventWindowLoaded监听函数.
有兴趣的可以把e2部分scipt标签与id为"element"的p标签更换下上下位置,再看看效果.
下面是完整代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Test</title> <script> window.addEventListener('load', eventWindowLoaded, false); function eventWindowLoaded() { var e1 = document.getElementById("element"); console.log("e1: " + e1); } </script> </head> <body> <p id="element"></p> <script> var e2 = document.getElementById("element"); console.log("e2: " + e2); </script> </body> </html>
相关文章推荐
- [原创]如何确保JavaScript的执行顺序 – 之jQuery.html深度分析
- html 和 javascript 的相关执行顺序
- 微信小程序:wx.navigateTo中url无法跳转问题(app.json中配置的tabBar与wx.navigateTo中url引用相同页面导致)
- JavaScript 程序执行顺序问题总结
- [原创]如何确保JavaScript的执行顺序 – 之jQuery.html并非万能钥匙
- JavaScript程序执行顺序问题总结
- 关于JavaScript预编译和执行顺序以及函数引用类型的思考
- 9.22 CSS复合属性和JavaScript在Html页面中的执行顺序
- IE Bug 1 - 错误识别出现在javascript脚本中的字符串,导致HTML标签解析错误
- Javascript在html加载时的执行顺序
- 添加RichEdit控件导致MFC对话框程序无法执行的解决方法
- JavaScript程序的执行顺序
- 运行VS可执行文件 360提示有菠萝影音插件想要捆绑 导致程序无法正常编译和运行解决办法
- 【原创】Javascript在html中的执行顺序
- JavaScript程序执行顺序
- javascript程序的执行与顺序详解
- ora-12154 tns 无法处理服务名(执行的程序途径不一致导致,枚举网络数种方法,大家还有其他解决办法?)
- javascript在 html 文档中的执行顺序
- st-程序执行的顺序,session使用,a标签使用总结
- php.ini里的短标签没开导致html无法读取php里的变量