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面向对象设计一 工厂模式
Dec 20 Javascript
js实现的仿新浪微博完美的时间组件升级版
Dec 20 Javascript
JS判定是否原生方法
Jul 22 Javascript
JS中多步骤多分步的StepJump组件实例详解
Apr 01 Javascript
js基于cookie记录来宾姓名的方法
Jul 19 Javascript
jQuery简单设置文本框回车事件的方法
Aug 01 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
Sep 06 Javascript
总结Javascript中数组各种去重的方法
Oct 04 Javascript
使用node.js中的Buffer类处理二进制数据的方法
Nov 26 Javascript
将angular-ui的分页组件封装成指令的方法详解
May 10 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
Jul 24 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
Feb 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
PHP4实际应用经验篇(9)
2006/10/09 PHP
PHP正确解析UTF-8字符串技巧应用
2012/11/07 PHP
yii上传文件或图片实例
2014/04/01 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
php读取远程gzip压缩网页的方法
2014/12/29 PHP
php使用GD实现颜色渐变实例
2015/06/02 PHP
php实现的验证码文件类实例
2015/06/18 PHP
php DES加密算法实例分析
2019/09/18 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
jquery 页面滚动到指定DIV实现代码
2013/09/25 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
2014/06/29 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
vue代码分割的实现(codesplit)
2018/11/13 Javascript
vue-router重定向和路由别名的使用讲解
2019/01/19 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
python设置环境变量的作用整理
2020/02/17 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
2020/02/17 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
工作中的自我评价如何写好
2013/10/28 职场文书
三字经教学反思
2014/04/26 职场文书
三孔导游词
2015/02/05 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
3招让你摆脱即兴讲话冷场尴尬
2019/08/08 职场文书
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js
js前端图片加载异常兜底方案
2022/06/21 Javascript