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 相关文章推荐
ext读取两种结构的xml的代码
Nov 05 Javascript
JS 判断undefined的实现代码
Nov 26 Javascript
求数组最大最小值方法适用于任何数组
Aug 16 Javascript
jQuery关于导航条背景切换效果实现示例
Sep 04 Javascript
js实现连个数字相加而不是拼接的方法
Feb 23 Javascript
JQuery+CSS实现图片上放置按钮的方法
May 29 Javascript
AngularJS入门教程之AngularJS模型
Apr 18 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
May 30 Javascript
JS实现的新闻列表自动滚动效果示例
Jan 30 Javascript
vue基础之v-bind属性、class和style用法分析
Mar 11 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
May 07 Javascript
详细分析Node.js 多进程
Jun 22 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的面试题集
2006/11/19 PHP
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
php导出word格式数据的代码实例
2013/11/25 PHP
浅析php创建者模式
2014/11/25 PHP
php socket通信简单实现
2016/11/18 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
在线编辑器中换行与内容自动提取
2009/04/24 Javascript
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
微信小程序实现侧边栏分类
2019/10/21 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
2020/09/16 Javascript
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
Tensorflow 多线程设置方式
2020/02/06 Python
python下载的库包存放路径
2020/07/27 Python
Python中对象的比较操作==和is区别详析
2021/02/12 Python
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
linux面试题参考答案(8)
2015/08/11 面试题
完美的中文自荐信
2014/05/24 职场文书
新书发布会策划方案
2014/06/09 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
小学公民道德宣传日活动总结
2015/03/23 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫