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

今天在写一段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中查找到该元素时,这时相当于得到的对象的指针引用,对“指针”指向的对象做任何修改,都会直接影响对象本身(有点按"引用传递"的意味)

 

时间: 2024-09-20 14:59:47

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

javascript:FF/Chrome与IE动态加载元素的区别说明_javascript技巧

复制代码 代码如下: <!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;p

js动态加载元素

问题描述 <html><body onload="d()"> <iframe name="a" src="b.html"></iframe></body><script> function d(){ var button = document.frames["a"].document.createElement("button"); v

如何动态加载外部Javascript文件_javascript技巧

最近在网上找到了一个可以动态加载js文件的js加载器,具体代码如下:JsLoader.js var MiniSite=new Object(); /** * 判断浏览器 */ MiniSite.Browser={ ie:/msie/.test(window.navigator.userAgent.toLowerCase()), moz:/gecko/.test(window.navigator.userAgent.toLowerCase()), opera:/opera/.test(window

JS加载器如何动态加载外部js文件_javascript技巧

今天在网上找到了一个可以动态加载js文件的js加载器,具体代码如下: JsLoader.js var MiniSite=new Object(); /** * 判断浏览器 */ MiniSite.Browser={ ie:/msie/.test(window.navigator.userAgent.toLowerCase()), moz:/gecko/.test(window.navigator.userAgent.toLowerCase()), opera:/opera/.test(windo

javascript的动态加载、缓存、更新以及复用(一)_javascript技巧

使用范围: OA.MIS.ERP等信息管理类的项目,暂时不考虑网站. 遇到的问题: 完成一个项目,往往需要引用很多js文件,比如jQuery.js.easyUI等.还有自己写的一些列js文件,那么这些文件如何方便的加载,如果文件有变化如何才能让客户端及时更新缓存?如果能够提高点运行效率,那就更好了. 目标: 1.  可以方便的引用js文件. 2.  尽量使用各种缓存,避免频繁从服务器读取文件. 3.  如果js文件有更新或者增加.减少几个减少js文件,需要客户端能够自动.立刻更新. 4.  Js

JavaScript动态加载CSS的三种方法

css|javascript|动态|加载 如果你有很多关联的CSS文件要一起加载,或者想动态的加载不同的CSS文件,那么下面的方法你一定对你有帮助. 第一种:一般用在外部CSS文件中加载必须的文件 程序代码@import url(style.css);/*只能用在CSS文件中或者style标签中*/ 第二种:简单的在页面中加载一个外部CSS文件  程序代码document.createStyleSheet(cssFile); 第三种:用createElement方法创建CSS的Link标签  程

Javascript教程动态加载事件的方法

 本篇文章主要是对js 动态加载事件的几种方法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 有些时候需要动态加载javascript事件的一些方法 往往我们需要在 JS 中动态添加事件,这就涉及到浏览器兼容性问题了,以下谈及的几种方法,我们也常常混合使用.   方法一.setAttribute var obj = document.getElementById("obj"); obj.setAttribute("onclick", "

动态加载脚本提升javascript性能

 动态加载脚本可以有效提升javascript性能,下面有个不错的示例,大家可以参考下 通过文档对象模型(DOM),几乎可以用Javascript动态创建HTML中的所有 内容.其根本在于,<script>标签与页面中的其他元素并无差异:都能通过DOM引用,都能在文档中移动.删除,甚至被创建.用标准的DOM方法可以非常容易地创建一个新年的<script>元素:   代码如下: <script type="text/javascript">  var

JavaScript中的对象动态加载技术

 什么是JavaScript对象动态加载 JavaScript动态加载(JavaScript Object Dynamic Loading) - 之所以叫做动态,是应为其有别与通常的静态加载形式. 典型的JavaScript静态加载方式,是通过<script>标签将我们可能需要的所有JS文件依次嵌入到一个HTML页面中,当浏览器执行到<script> 标签,就会到我们指定的地方去加载JavaScript并运行,这时,文件中定义的无论方法.类.对象等,已经存在与浏览器,等待被使用.除