zoukankan      html  css  js  c++  java
  • javascript:FF/Chrome 与 IE 动态加载元素的区别

    今天在写一段js时,发现IE与FF在动态加载Html元素时,有一些差别,看下面的代码:

    <!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(兼容模式)下运行正常,见下面的截图:

    但是在FF,Chrome,IE9(非兼容模式)下,就不对了:

    把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中查找到该元素时,这时相当于得到的对象的指针引用,对“指针”指向的对象做任何修改,都会直接影响对象本身(有点按"引用传递"的意味)

  • 相关阅读:
    Python: 什么是*args和**kwargs
    python实现获取电脑IP、主机名、Mac地址
    python操作oracle完整教程
    python连接oracle数据库报错"DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "解决方案
    ORACLE_BASE、ORACLE_HOME有什么区别
    Java的JAVA_HOME、Path、CLASSPATH环境变量小结,可以借助这三个的配置去理解Oracle中的那几个环境变量的配置作用
    python连接Oracle的方式以及过程中遇到的问题
    hadoop学习笔记(六):hadoop全分布式集群的环境搭建
    CentOS7安装jdk教程
    在线用户列表
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/2796393.html
Copyright © 2011-2022 走看看