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事件机制扩展插件 jquery鼠标右键事件
Dec 21 Javascript
Js中获取frames中的元素示例代码
Jul 30 Javascript
javascript数字时钟示例分享
Apr 23 Javascript
JQuery 控制内容长度超出规定长度显示省略号
May 23 Javascript
两种JS实现屏蔽鼠标右键的方法
Aug 20 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
Oct 12 Javascript
js密码强度校验
Nov 10 Javascript
简单实现IONIC购物车功能
Jan 10 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
Aug 15 Javascript
js自定义input文件上传样式
Oct 26 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
Mar 12 Javascript
js实现旋转的星空效果
Nov 01 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.ini中文版(2)
2006/10/09 PHP
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
PHP 错误处理机制
2015/07/06 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
thinkphp验证码的实现(form、ajax实现验证)
2016/07/28 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
浅析js中的浮点型运算问题
2014/01/06 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
[01:02:02]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第二局
2016/02/25 DOTA
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
Python多进程fork()函数详解
2019/02/22 Python
Django配置MySQL数据库的完整步骤
2019/09/07 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
2020/07/03 Python
正隆泰信息技术有限公司上机题
2012/06/14 面试题
成品仓管员工作职责
2013/12/29 职场文书
五年级英语教学反思
2014/01/31 职场文书
行政文员岗位职责
2015/02/04 职场文书
慈善献爱心倡议书
2015/04/27 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
机器人瓦力观后感
2015/06/12 职场文书
初中同学会致辞
2015/08/01 职场文书
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android