javascript:FF/Chrome 与 IE 动态加载元素的区别

简介: 今天在写一段js时,发现IE与FF在动态加载Html元素时,有一些差别,看下面的代码: ff 与 ie 动态加载元素的区别 li{margin:0;padding:0;list-style:none} function add(){ var liTemplate = $("#template"); liTemplate.

今天在写一段js时,发现IE与FF在动态加载Html元素时,有一些差别,看下面的代码:

<!doctype html>
<html>
<head>
	<title>ff 与 ie 动态加载元素的区别</title>
	<script type="text/javascript" src="jquery-1.4.4.min.js"></script>
	<style type="text/css">
		li{margin:0;padding:0;list-style:none}
	</style>
	<script type="text/javascript">
		function add(){
			var liTemplate = $("#template");
			liTemplate.find("input[name='awbpre']").val("999");
			liTemplate.find("input[name='awbno']").val("12312311");			
			$("#box").append("<li>" + liTemplate.html() + "</li>");		
		}
	</script>
</head>
<body>
	<ul id="box">
		<li id="template" style="display:none">
			awbpre:
			<input type="text" value="#awbno#" name="awbpre"/>
			awbno:
			<input type="text" value="#awbno#" name="awbno"/>
		</li>
	</ul>	
	<input type="button" value="add" onclick="return add()"/>
</body>
</html>

  

代码本意为:点击Add按钮时,动态向页面添加二个输入框,同时给二个新加的输入框赋值。IE 6,7,8,9(兼容模式)下运行正常,见下面的截图:

但是在FF,Chrome,IE9(非兼容模式)下,就不对了:

 

把add()方法改成

	<script type="text/javascript">
		function add(){
			var liTemplate = $("#template");				
			$("#box").append("<li>" + liTemplate.html() + "</li>")
			var new_li = $("#box li:last");
			new_li.find("input[name='awbpre']").val("999");
			new_li.find("input[name='awbno']").val("12312311");		
		}
	</script>

  就对了,二者的区别在于:第一种是先做赋值处理,再添加到dom树中;第二种写法是先加到dom树中,再找出对应的处理赋值。我对于前端技术实属菜鸟,个人理解:第一种写法类似"按值传递",var liTemplate = $("#template");后,不管再对liTemplate里的元素做何处理,因为liTemplate尚未加入到dom树中,最终调用liTemplate.html()时,返回的html代码,还是最初处理前的html代码(有点按值传递,使用的是一个副本,不管怎么处理,不影响原值的意味);而第二种写法,先加入到dom树后,再从dom中查找到该元素时,这时相当于得到的对象的指针引用,对“指针”指向的对象做任何修改,都会直接影响对象本身(有点按"引用传递"的意味)

 

目录
相关文章
|
Web App开发 JavaScript 前端开发
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
|
10月前
|
Web App开发 数据采集 前端开发
Python + Chrome 爬虫:如何抓取 AJAX 动态加载数据?
Python + Chrome 爬虫:如何抓取 AJAX 动态加载数据?
|
Web App开发 前端开发 JavaScript
Chrome 浏览器中执行 JavaScript
Chrome 浏览器中执行 JavaScript
472 0
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
1570 9
|
前端开发 JavaScript API
javascript 的File对象在IE中不支持
业务中有一段涉及到处理canvas的图片然后将内容进行上传,后测试发现在IE中不好使哎...
javascript 的File对象在IE中不支持
|
Web App开发 JavaScript 前端开发
JavaScript在IE和标准浏览器下的兼容性处理
JavaScript在IE和标准浏览器下的兼容性处理
468 0
|
Web App开发 JavaScript 前端开发
使用谷歌 Chrome 浏览器禁用网页 JavaScript
避免 Web 弹窗影响正常阅读
1903 0
使用谷歌 Chrome 浏览器禁用网页 JavaScript
|
Web App开发 JavaScript 前端开发
如何使用Selenium自动化Chrome浏览器进行Javascript内容的数据挖掘和分析?
数据挖掘和分析是当今互联网时代的重要技能,它可以帮助我们从海量的信息中提取有价值的知识,为我们的决策和行动提供支持。但是,有些网站的内容是通过Javascript动态生成的,这就给数据挖掘和分析带来了一定的难度。如何才能有效地获取和处理这些Javascript内容呢?本文将介绍一种简单而强大的方法,就是使用Selenium自动化Chrome浏览器进行Javascript内容的数据挖掘和分析。
302 0
如何使用Selenium自动化Chrome浏览器进行Javascript内容的数据挖掘和分析?
|
Web App开发 JavaScript
JS 获取当前浏览器类型(IE、Chrome、Edge、Firefox、Opera、UC、QQ)
JS 获取当前浏览器类型(IE、Chrome、Edge、Firefox、Opera、UC、QQ)
1679 0
|
Web App开发 UED C++
在chrome浏览器中调用IE浏览器并访问(openIE.reg自定义协议)
在chrome浏览器中调用IE浏览器并访问(openIE.reg自定义协议)