DOM 操作技术之动态脚本

<pre name="code" class="html"><html>
	<head>
		<title>DOM_操作技术_动态脚本</title>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<script type="text/javascript">
			/**
			 param url 需要加载的js的url。
			*/
			function loadScript(url){
				var script = document.createElement("script");
				script.type = "text/javascript";
				script.src = url;
				document.body.appendChild(script);
			}
			
			/**
			 param code 需要执行动态的脚本
			*/
			function dynamicExecuteScript(code){
				var script = document.createElement("script");
				script.type = "text/javascript";
				try{
					script.appendChild(code);
				}catch(ex){
					script.text = code;
				}
				document.body.appendChild(script);
			}
			
			window.onload = function(){
				document.getElementById("loadScript").onclick = function(){
					//外部js加载
					loadScript("http://code.jquery.com/jquery-latest.js");
				}
				
				document.getElementById("button").οnclick= function(){
					if(typeof($)=="undefined"){
						alert("请先加载jquery.js文件")
					}else{
						alert("选择器测试$(\"#myList li\").length的结果:"+$("#myList li").length);
					}
				}
				//值得注意的一个问题加载完js后,我怎么知道该文件已经加载完成?
				
				//从逻辑上讲,下面的DOM代码是有效的:
				/*
				var script1 = document.createElement("script");
				script1.type = "text/javascript";
				script1.appendChild(document.createTextNode("(function syaHi(){alert('hi');})();"));
				document.body.appendChild(script1);
				
				在FireFox、Safari、Chrome、Opera中,这些DOM元素可以运行,IE8及之前版本会报错。
			      IE将<script>视为一个特殊的元素,不允许DOM访问其子节点。不过,可以使用<script>
				  的text属性来指定javaScript代码,像下面例子这样:
				*/
				var script2 = document.createElement("script");
				script2.type = "text/javascript";
				script2.text = "(function(){alert('hi');})();"
				document.body.appendChild(script2);
				/*
				经过这样的修改后的代码可以在IE、Firefox、Opera和Safari3以及之后的版本中运行。
				Safari3.0之前的版本虽然不支持text属性,但允许使用文本节点技术来指定代码。如果
				需要兼容更早前版本的Safari,可以使用下列代码:
				*/
				var script3 = document.createElement("script");
				script3.type = "text/javascript";
				var code = "(function sayHi(){alert('hi');})();";
				try{
					script3.appendChild(code);
				}catch(ex){
					script3.text = code;
				}
				document.body.appendChild(script3);
				
				//下面调用的方法是整合的兼容代码
				dynamicExecuteScript("(function(){alert('调用dynamicExecuteScript()');})();");
				
				/*
				以这种方式加载的代码会在全局作用域中执行,而且当脚本执行后将立即可用。实际上
				这样执行的代码与全局作用域中把相同字符串传递给eval()是一样的。
				*/
				
			}
		</script>
	</head>
	<body>
		<div id="myDiv" class="myDiv" title="myDiv" lang="en" dir="rtl" diyAttr="diyAttr">
		</div>
		
		<ul id="myList">
			<li>Item1</li>
			<li>Item2</li>
			<li>Item3</li>
		</ul>
		<button id = "loadScript">
			加载jquery.js
		</button>
		<button id = "button">
			测试jquery库是否可用
		</button>
	</body>
</html>



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值