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 相关文章推荐
JQuery之拖拽插件实现代码
Apr 14 Javascript
打开新窗口关闭当前页面不弹出关闭提示js代码
Mar 18 Javascript
js对象转json数组的简单实现案例
Feb 28 Javascript
jquery用offset()方法获得元素的xy坐标
Sep 06 Javascript
scrollWidth,clientWidth,offsetWidth的区别
Jan 13 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
Apr 23 Javascript
浅谈js中同名函数和同名变量的执行问题
Feb 12 Javascript
分享19个JavaScript 有用的简写写法
Jul 07 Javascript
js前端导出Excel的方法
Nov 01 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
Jul 07 Javascript
详解vue2.0模拟后台json数据
May 16 Javascript
Element Cascader 级联选择器的使用示例
Jul 27 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 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
zf框架的校验器InArray使用示例
2014/03/13 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
2016/05/19 PHP
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
2014/05/27 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python文件夹与文件的操作实现代码
2014/07/13 Python
Python pickle模块用法实例分析
2015/05/27 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
详解python持久化文件读写
2019/04/06 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
X/HTML5 和 XHTML2
2008/10/17 HTML / CSS
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
人力资源专业推荐信
2013/11/29 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
单位承诺书格式
2014/05/21 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
学前班语言教学计划
2015/01/20 职场文书
部队个人年终总结
2015/03/02 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
债务追讨律师函
2015/06/24 职场文书
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android