Javascript动态加载Html元素到页面Dom文档结构时执行顺序的不同
我们有时会通过ajax动态获取一段Html代码,并且将这段代码通过javascript放到页面的Dom结构中去。 而很多时候通过ajax动态获取的Html代码中也包含javascript代码,有一点需要注意的是 通过ajax动态加载Html元素到页面Dom 和 浏览器访问页面时加载页面Dom 时javascript的执行顺序是有所不同的。
我们先来看一个Html页面的代码,这个页面会通过ajax去Web服务器获取一段Html代码片段并通过javascript加载到页面的Dom结构中去,我们把这个Html页面在本文中称作主页面:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript" src="Scripts/jquery.js"></script>
<script type="text/javascript">
alert("Main_1>>" + "主页面script标签开始加载"); alert("Main_2>>" + ($("#htmlContainer").length > 0 ? "主页面找到htmlContainer" : "主页面未找到htmlContainer")); $(function () {
alert("Main_4>>" + "主页面document.ready执行");
alert("Main_5>>" + ($("#htmlContainer").length > 0 ? "主页面找到htmlContainer" : "主页面未找到htmlContainer")); $.ajax({
url: "PartialHtmlPage.html",
data: null,
type: "GET",
contentType: "text/html",
success: function (result) {
alert("Main_6>>" + "主页面ajax已经获取到部分页html代码,开始加载部分页的html代码到主页面dom结构");
$("#htmlContainer").html(result);
alert("Main_7>>" + "主页面加载部分页html代码到主页面dom结构完毕");
},
error: function (result) {
alert(result.statusText);
}
});
}) alert("Main_3>>" + "主页面script标签加载完毕");
</script>
</head>
<body>
<div id="htmlContainer"> </div>
</body>
</html>
我们在页面中的一些关键位置用alert打出了一些信息以表示当前页面执行到什么地方了,并通过数字标注了alert执行时的顺序。我们执行页面后会发现在主页面中,当用浏览器去访问页面通过常规方式加载页面Dom结构时,上面代码中执行到script标签时,script标签下的Html元素都还没有加载到Dom结构里面去,因为上面第10行代码显示的是 主页面未找到htmlContainer 。而且jquery中的document.ready事件是在整个页面的Dom结构生成完毕后才会被执行,因为第14行代码显示的是 主页面找到htmlContainer ,并且第13行代码要后于32行代码执行,说明当执行到13行代码的时候,整个页面的Html标签都已经加载完毕了。
我们再来看看主页面ajax方法获取到的Html代码片段(PartialHtmlPage.html),我们把Html代码片段在本文中称作部分页:
<script type="text/javascript">
alert("Partail_1>>"+"部分页script标签开始加载");
alert("Partail_2>>" + ($("#partialPageDiv").length > 0 ? "部分页找到partialPageDiv" : "部分页未找到partialPageDiv")); $(function () {
alert("Partail_3>>" + "部分页document.ready执行");
}); alert("Partail_4>>" + "部分页script标签加载完毕");
</script>
<div id="partialPageDiv">
测试div,看使用ajax动态加载html到页面dom里面时,js是否能够找到这个div
</div>
上面部分页的代码会在主页面第23行代码被加载到主页面Dom结构中去,大家可以观察下部分页alert弹出信息的顺序,我们来看看和主页面加载Dom结构时有什么不同。当执行到部分页的script标签时,script标签下的Html元素都已经被加载到Dom结构里面去了,因为上面部分页第3行代码显示的是 部分页找到partialPageDiv 。部分页中jquery的document.ready事件在部分页的Dom结构生成完毕前就被执行了,因为上面部分页第6行代码要先于第9行代码执行,实际上在部分页中调用 $(function () {})时里面的function就被立即执行了,而不是像主页面一样要等整个页面的Dom结构加载完毕后才执行。
请大家通过javascript动态获取Html片段加载到页面Dom结构时要注意上面两个问题,否则很容易引起一些不必要的Bug。
Javascript动态加载Html元素到页面Dom文档结构时执行顺序的不同的更多相关文章
- js动态加载HTML元素时出现的无效的点击事件
项目中列表数据中隐藏着详情数据, 图一: 详情数据是:根据当前行的数据作为参数,通过ajax请求到后台返回的数据,再根据返回的结果动态生成HTML页面 图二: js文件中的这些js的点击事件无效: j ...
- jquery:为动态加载的元素添加点击事件
jquery:为动态加载的元素添加点击事件 最近在做项目的时候遇到了这样一个问题,给用ajax动态加载出来的内容添加点击事件,但是怎么都触发不了,经过查询试验总结出正确的写法 在jquery1.7之前 ...
- JavaScript动态加载js文件
/********************************************************************* * JavaScript动态加载js文件 * 说明: * ...
- JavaScript动态加载script方式引用百度地图API 拓展---JavaScript的Promise
上一篇博客JavaScript动态加载script方式引用百度地图API,Uncaught ReferenceError: BMap is not defined 这篇文章中我接触到一个新的单词:Pr ...
- JQuery 动态加载 HTML 元素时绑定点击事件无效问题
问题描述 假设项目中有一个列表页面,如下: 当点击列表一行数据可以显示详情页面,而详情页面的数据是根据当前行的数据作为参数,通过 ajax 请求到后台返回的数据,再根据返回的结果动态生成 html 页 ...
- 用JavaScript动态加载CSS和JS文件
本文转载自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/11/14/2248451.html 今天项目中需要用到动态加载 CSS 文件 ...
- jquery:为动态加载的元素绑定事件
最近在做项目的时候发现的一个问题,通过ajax动态加载出来的一个button值绑定不了点击事件.我使用的是datatables这款表单插件,表单内容是通过ajax动态渲染出来的. 解决方案: 通过Go ...
- 移动端,ajax 动态加载的元素,为动态添加的一系列同个类名的元素添加点击事件
背景:一个列表页,有一系列同类名的元素,需要为每一个动态添加的列表项添加事件: 点击选择下图中不同的文档类型,再通过 ajax 动态加载不同的文档. 使用过的方法: 1.通知 jquery 的 $(s ...
- JavaScript动态加载资源【js|css】示例代码
在开发过程中会用到各种第三方的插件,或者自己写在单独文件中的js方法库或者css样式,在html头部总是需要写一大堆的script和link标签,如果想要自己实现动态的引入资源文件,可以使用开源的re ...
随机推荐
- TermServDevices错误
来源TermServDevices的错误日志,日志内容 事类型: 错误 事件来源: TermServDevices 描述 打印机 XXXX 所需的驱动程序 XXX 未知.登录之前,请与 ...
- 安装Sql server 2008时出现sql server 2005 express tools failed 怎么办?
提示错误:Sql2005SsmsExpressFacet 检查是否安装了 SQL Server 2005 Express 工具. 失败,已安装 SQL Server 2005 Express 工具.若 ...
- windows下memcache安装及配置
1.安装memcached服务,链接为http://i.cnblogs.com/Files.aspx, 下载解压后放在一个文件夹下,在开始搜索中输入cmd, 进入cmd黑框,cd 路径,进入memca ...
- maven小记
编译webx3.0,必须用maven 3.0 git clone https://github.com/webx/citrus.gitmaven clean install -DskipTest(Te ...
- C++经典编程题#3:数字求和
总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个正整数a,以及另外的5个正整数,问题是:这5个整数中,小于a的整数的和是多少? 输入 输入一行,只包括6个小于100的正整数, ...
- [开源]STM32F103RBT6最小系统,LEDx2,KEYx4
STM32F103RBT6最小系统,调试通过,可以SWD模式下载程序,支持串口,一键下载. stm32f103rbt6最小系统链接:http://pan.baidu.com/s/1qYCHeHY 密码 ...
- ASIHTTPRequest 记录过去5秒的平均流量字节/秒
//记录过去5秒的平均流量字节/秒 NSLog(@"%llu",[ASIHTTPRequest averageBandwidthUsedPerSecond]);
- Oracle一个实例配置多个监听
要想给一个Oracle实例配置多个监听,首先要定义多个监听器,因为是多个监听,势必会有一些监听端口不是1521. 现在服务端的listener.ora文件中定义如下监听器: LISTENER = (D ...
- UVA 10127题目的解答
#include <iostream>#include <cstdio>#include <cmath> int main(){ int num; while (s ...
- 经过各种坑之后centos+ uwsgi + nginx +django 终于配好了
https://pypi.python.org/pypi/setuptools#downloads https://www.python.org/ftp/python/ 开机 加入 uwsgi ngi ...