JS 节点属性和Element属性

 节点属性

parentNode

返回节点的父节点

childNodes

返回子节点集合,childNodes[i]

firstChild

返回节点的第一个子节点,最普遍的用法是访问该元素的文本节点

lastChild

返回节点的最后一个子节点

nextSibling

下一个节点

previousSibling

上一个节点

Element属性

    firstElementChild

返回节点的第一个子节点

lastElementChild

返回节点的最后一个子节点

nextElementSibling

下一个节点

previousElementSibling

上一个节点

 案例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<h1>hello</h1>
		<ul id="ul">
			<li id="a1">电风扇<a href="javascript:void(0)">隐藏</a></li>
			<li>蓝宝<a href="javascript:void(0)">隐藏</a></li>
			<li>刘芳<a href="javascript:void(0)">隐藏</a></li>
			<li>杨树<a href="javascript:void(0)">隐藏</a></li>
			<li id="a5">张飞<a href="javascript:void(0)">隐藏</a></li>
		</ul>
		<p>mike</p>
	</body>
</html>
<script type="text/javascript">
	  window.onload = function () {
		  // fun1()
           // fun2();
           // fun3();
		   // fun4();
		   fun5();
        }

	//parentNode
	function fun1(){
		var ul = document.getElementById("ul");
		 //取出所有的a标签
		var aA = ul.getElementsByTagName("a");
		for (var i = 0; i < aA.length; i++) {
		    //给每个a标签注册事件
		    aA[i].onclick = function () {
		        //this是当前元素,parentNode  是单数,
				//因为每个节点,只有一个父节点!有多个子节点
		       this.parentNode.style.display = "none";
		    }
		}
	}
	
	//childNodes既包括元素节点,又包括文本节点
	function fun2(){
		var ul = document.getElementById("ul");
		for (var i = 0; i < ul.childNodes.length; i++) {
			 //nodeType=1,元素节点
            //nodeType=3,文本节点(#text 空文本)
			console.log(ul.childNodes[i].nodeName);
			if(ul.childNodes[i].nodeType==1){
				ul.childNodes[i].style.color="orchid";
			}
		}
	}
	
	function fun3(){
		var ul = document.getElementById("ul");
		//children  只包括元素节点,不包括文本节点
		for (var i = 0; i < ul.children.length; i++) {
			console.log(ul.children[i].nodeName);
			ul.children[i].style.color="red";
		}
	}
		
	//注意:firstChild和lastChild只能对单个节点就行操作,不能对节点数组进行操作;
		//firstChild和lastChild弹出的是undefined?
		function fun4(){
			var ul=document.getElementById("ul");
			console.log(ul.firstChild.nextSibling.innerHTML);
			console.log(ul.lastChild.previousSibling.innerHTML);
		}
	//	问题主要是出自<ul id="a1">之后和</ul>之前的“回车”和“空格”字符,复现里面打印出的#text就是这些“回车”和“空格”字符,也称文本节点,它们才是真正意义上的firstChild和lastChild,而不是我们想要获取的li,所以debug中将这些空白字符去掉即可。
	
	//访问节点兼容问题
	//Element属性:
	 function fun5(){
			var ul=document.getElementById("ul");
			// console.log(ul.firstElementChild.innerHTML);  //first
			// console.log(ul.lastElementChild.innerHTML);  //last
			console.log(ul.nextElementSibling.innerHTML); //next  ==>mike
			console.log(ul.previousElementSibling.innerHTML); //previous ==>hello
		}
	
		
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值