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 相关文章推荐
使用prototype.js进行异步操作
Feb 07 Javascript
网站页面自动跳转实现方法PHP、JSP(上)
Aug 01 Javascript
老生常谈Javascript中的原型和this指针
Oct 09 Javascript
Jquery 整理元素选取、常用方法一览表
Nov 26 Javascript
vue 请求后台数据的实例代码
Jun 22 Javascript
Node.js 使用流实现读写同步边读边写功能
Sep 11 Javascript
详解js跨域请求的两种方式,支持post请求
May 05 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
Jul 03 Javascript
一秒学会微信小程序制作table表格
Feb 14 Javascript
js中值引用和地址引用实例分析
Jun 21 Javascript
JQuery绑定事件四种实现方法解析
Dec 02 jQuery
Vue 实例中使用$refs的注意事项
Jan 29 Vue.js
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面向对象教程之自定义类
2014/06/10 PHP
PHP HTTP 认证实例详解
2016/11/03 PHP
使一个函数作为另外一个函数的参数来运行的javascript代码
2007/08/13 Javascript
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
使用JavaScript触发过渡效果的方法
2017/01/19 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
[02:23]2014DOTA2国际邀请赛中国战队回顾
2014/08/01 DOTA
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
Python Tkinter GUI编程入门介绍
2015/03/10 Python
Python自动化测试ConfigParser模块读写配置文件
2016/08/15 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
Python利用itchat对微信中好友数据实现简单分析的方法
2017/11/21 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
python 重命名轴索引的方法
2018/11/10 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
服务员岗位责任制
2014/02/11 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
2014年寒假社会实践活动心得体会
2014/04/07 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
小班教师个人总结
2015/02/05 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
DSP接收机前端设想
2022/04/05 无线电