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


Posted in Javascript onJanuary 26, 2014
<!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(兼容模式)下运行正常,见下面的截图:
javascript:FF/Chrome与IE动态加载元素的区别说明

但是在FF,Chrome,IE9(非兼容模式)下,就不对了:
javascript:FF/Chrome与IE动态加载元素的区别说明

把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中查找到该元素时,这时相当于得到的对象的指针引用,对“指针”指向的对象做任何修改,都会直接影响对象本身(有点按"引用传递"的意味)
Javascript 相关文章推荐
javascript 嵌套的函数(作用域链)
Mar 15 Javascript
深入理解JavaScript中的传值与传引用
Dec 09 Javascript
jquery实现非叠加式的搜索框提示效果
Jan 07 Javascript
js防止页面被iframe调用的方法
Oct 30 Javascript
jQuery实现简单的间隔向上滚动效果
Mar 09 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
Nov 27 Javascript
vue.js实现仿原生ios时间选择组件实例代码
Dec 21 Javascript
AngularJS模态框模板ngDialog的使用详解
May 11 Javascript
vue2.0学习之axios的封装与vuex介绍
May 28 Javascript
前端Electron新手入门教程详解
Jun 21 Javascript
javascript实现图片轮播代码
Jul 09 Javascript
vue制作toast组件npm包示例代码
Oct 29 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
Jan 26 #Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
Jan 25 #Javascript
手机平板等移动端适配跳转URL的js代码
Jan 25 #Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
Jan 24 #Javascript
jquery批量设置属性readonly和disabled的方法
Jan 24 #Javascript
jquery 通过name快速取值示例
Jan 24 #Javascript
jquery 鼠标滑动显示详情应用示例
Jan 24 #Javascript
You might like
由php的call_user_func传reference引发的思考
2010/07/23 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
javascript 贪吃蛇实现代码
2008/11/22 Javascript
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
基于jQuery的表格操作插件
2010/04/22 Javascript
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
[05:31]DOTA2英雄梦之声_第08期_莉娜
2014/06/23 DOTA
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
Python兔子毒药问题实例分析
2015/03/05 Python
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
Python科学计算之Pandas详解
2017/01/15 Python
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
Python中协程用法代码详解
2018/02/10 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
如何获得EntityManager
2014/02/09 面试题
计算机专业自荐信
2013/10/14 职场文书
档案工作汇报材料
2014/08/21 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
安全生产培训心得体会
2016/01/18 职场文书