DOM 中的Element详解

<html>
	<head>
		<title>DOM_Element</title>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<script type="text/javascript">
			/*
			 Element属性说明
			 nodeType:1
			 nodeName:元素标签名
			 nodeVlaue:值为null
			 parentNode:可能是Document或Element
			 其子节点可能是Element、Text、Comment、ProcessingInstruction、CDATASection或
			 EntityReference。
			 
			 HTML
			 
			*/
			
			window.onload = function(){
				var div = document.getElementById("myDiv");
				alert(div.tagName);//DIV,元素的签名都是大写表示
				alert(div.tagName == div.nodeName);
				/*
				在xml或(有时候也包括XHTML)中,标签名则始终与源代码中的保持一致。
				假如你不确定脚本是在HTML或者是在XML文档中执行,最好是在比较之前将
				标签名转换为大小写相同的形式。
				*/
				if(div.tagName=="div"){//不能这样做容易出问题
					//do something.
				}
				if(div.tagName.toLowerCase()=="div"){//把标签名转成小写再比较
					//do something.
				}
				
				//取特性
				/*
					注意,传递给getAttribute() 的特性与实际的特性名必须相同,
					因此获取class需要传class而不是className,className访问对象属性时才有用。
					如果给定的特性名不存在则返回null
					通过getAttribute可以取得自定义的特性。
					特性名称不区分大小写即“id”和“ID”等同,
					注意的HTML5中规范自定义标签应当加上data-的前缀以便于验证。
					
					公认的特性都可以通过DOM对象访问,
					自定义的特性可以在ie中可以通过DOM对象访问其他的浏览器不支持。
				*/
				alert(div.getAttribute("id"));
				alert(div.getAttribute("class"));
				alert(div.getAttribute("myDiv"));
				alert(div.getAttribute("en"));
				alert(div.getAttribute("dir"));
				alert(div.getAttribute("diyAttr"));//取得自定义特性。
				
				//删除特性
				div.removeAttribute("en");
				alert(div.getAttribute("en"));
				
				//attributes属性
				var id = div.attributes.getNamedItem("id").nodeValue;
				alert(id);//myDiv
				var id2 = div.attributes["id"].nodeValue;
				alert(id2);//myDiv
				div.attributes["id"].nodeValue="someOtherId";
				alert(div.attributes["id"].nodeValue);//someOtherId
				
				var oldAttr = div.attributes.removeNamedItem("id");
				alert(oldAttr);
				
				//使用attributs遍历
				function outputAttributes(element){
					var pairs = new Array();
					var attrName = null;
					var attrValue = null;
					var i = null;
					var length = null;
					
					for(i=0,length = element.attributes.length;i<length;i++){
						attrName = element.attributes[i].nodeName;
						attrValue = element.attributes[i].nodeValue;
						pairs.push(attrName + "=\""+attrValue+"\"");
					}
					return pairs.join(" ");
				}
				
				alert(outputAttributes(div));//class="myDiv" title="myDiv" lang="en" dir="rtl" diyattr="diyAttr"
				
				/*
					每一个特性节点都有一个名为specified的属性,这个属性的值如果为true,这意味着要么
					是在html中指定了相应的特性,要么是通过setAttribute()方法设置了该特性。在ie中所有
					未设置过的特性的该属性都为false,而在其他浏览器中不会为这类特性生成对应的特性节点
					(因此,在这些浏览器中,任意的特性节点的specified值始终为true)。下面是改进代码。
				*/
				function outputAttributes1(element){
					var pairs = new Array();
					var attrName = null;
					var attrValue = null;
					var i = null;
					var length = null;
					
					for(i = 0 , length = element.attributes.length; i<length ; i++){
						attrName = element.attributes[i].nodeName;
						attrValue = element.attributes[i].nodeValue;
						if(element.attributes[i].specified){
							pairs.push(attrName +"=\""+attrValue +"\"");
						}
					}
					return pairs.join(" ");
				}
				
				alert(outputAttributes1(div));
				
				/*
				  创建元素
				*/
				var div = document.createElement("div");
				//动态设置属性
				div.id = "myNewDiv";
				div.className = "box";
				div.innerText = "你就是一个神经病";
				document.body.appendChild(div);
				/*动态设置属性问题在ie7以及更早版本中使用
				1、不能够动态设置<iframe> 的name元素,
				2、不同通过reset方法重设动态创建<input>元素
				3、动态创建type特性值为reset的<button>元素重设不了表单。
				4、动态创建一批name相同的单选按钮彼此毫无关系,
				另一种方式可以解决以上问题,除ie其他的浏览器不支持这种用法,
				所以使用要做浏览器检测
				var div2 = document.createElement("<div id=\"myNewDiv2\" class= \"box\">神经病2</div>");
				document.body.appendChild(div2);
				
				*/
				
				/*元素的子节点childNodes
				  下面html id为myList 
				  如果IE来解析ul元素会有3个子节点,分别是3个li。但如果是在其他的浏览器中,
				  ul中都会有7个元素,包括3个li元素4个文本节点(li之间的空白符)。如果像下面
				  这样将元素间的空白符删除,那么所有浏览器都会返回相同数目的子节点。
				  <ul id="myList"><li>Item1</li><li>Item2</li><li>Item3</li></ul>
				*/
				 var element = document.getElementById("myList");
				 var childNodeNum = 0;//用来计数子节点的数目
				 for(var i=0,len=element.childNodes.length;i<len;i++){	
					if(element.childNodes[i].nodeType == 1){//nodeType为1表示元素节点。
						childNodeNum++;
					}
				 }
				 alert(childNodeNum);
				
			}
		</script>
	</head>
	<body>
		<div id="myDiv" class="myDiv" title="myDiv" lang="en" dir="rtl" diyAttr="diyAttr">
			Hello Kitty!
		</div>
		
		<ul id="myList">
			<li>Item1</li>
			<li>Item2</li>
			<li>Item3</li>
		</ul>
	</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值