源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

javascript:FF/Chrome与IE动态加载元素的区别说明

  • 时间:2022-06-06 06:09 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:javascript:FF/Chrome与IE动态加载元素的区别说明
[u]复制代码[/u] 代码如下:
<!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(兼容模式)下运行正常,见下面的截图: [img]http://files.jb51.net/file_images/article/201401/20140126091800.png[/img] 但是在FF,Chrome,IE9(非兼容模式)下,就不对了: [img]http://files.jb51.net/file_images/article/201401/20140126092858.png[/img] 把add()方法改成
[u]复制代码[/u] 代码如下:
 <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>
就对了,[b]二者的区别在于:[/b]第一种是先做赋值处理,再添加到dom树中;第二种写法是先加到dom树中,再找出对应的处理赋值。我对于前端技术实属菜鸟,[b]个人理解:[/b]第一种写法类似"按值传递",var liTemplate = $("#template");后,不管再对liTemplate里的元素做何处理,因为liTemplate尚未加入到dom树中,最终调用liTemplate.html()时,返回的html代码,还是最初处理前的html代码(有点按值传递,使用的是一个副本,不管怎么处理,不影响原值的意味);而第二种写法,先加入到dom树后,再从dom中查找到该元素时,这时相当于得到的对象的指针引用,对“指针”指向的对象做任何修改,都会直接影响对象本身(有点按"引用传递"的意味)
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部