js的节点操作

1.DOM基础

l什么是DOM:文档对象模型。赋予js操作节点的能力。当网页被加载时,浏览器会创建页面的文档对象模型(Document ObjectModel)

l浏览器支持情况:IE 10% chrome 60% FF 99%

HTML DOM 模型被构造为对象的树。

2.通常,通过 JavaScript,您需要操作 HTML 元素。
为了做到这件事情,您必须首先找到该元素。有三种方法来做这件事:
通过 id 找到 HTML 元素:var x=document.getElementById();
通过标签名找到 HTML 元素:var y=getElementsByTagName(); 这里要注意通过标签名查找是要先缩小查找范围;
通过类名找到 HTML 元素:var x=document.getElementsByClassName();通过类名查找不 兼容IE,解决方法会在下面说明;

通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。
      JavaScript 能够改变页面中的所有 HTML 元素
      JavaScript 能够改变页面中的所有 HTML 属性
      JavaScript 能够改变页面中的所有 CSS 样式
      JavaScript 能够对页面中的所有事件做出反应

2.DOM方法获取节点:

  2.1.从父节点获取子节点:

     childNodes, nodeType 组合使用,使用childNodes是获取到所有的元素节点以及文本节点,但一般我们只需要元素节点,所以要使用nodeType进行判断选择;

      还有children也可以获取子节点,而且仅仅获取元素节点,所以比较常用:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<ul id="fat">
			<li></li>
			<li></li>
		</ul>
	</body>
	<script type="text/javascript">
		var oFat=document.getElementById('fat');
		var num=0;
		
		
		//nodeType==1 元素节点
		//nodeType==3 文本节点
//		for(var i=0;i<oFat.childNodes.length;i++){   //循环判断oFat中的节点是否为元素节点
//			if(oFat.childNodes[i].nodeType==1){
//				num++;   
//			}
//		}

		num=oFat.children.length;  //children可以直接获取元素节点
		
		console.log(num);
	</script>
</html>

 2.2.从子节点获取付节点:

   parentNode:获取父节点:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<ul id="fat">
			<li id="chi"></li>
			<li></li>
		</ul>
	</body>
	<script type="text/javascript">
		var oFat=document.getElementById('fat');
		var oChi=document.getElementById('chi');
		
		console.log(oChi.parentNode);  //parentNode可以通过子节点获取父节点;
	</script>
</html>

2.3.获取首尾子节点以及兄弟节点:

    firstChild、firstElementChild ,lastChild 、lastElementChild  ;有兼容性问题,需要同过判断解决:

  nextSibling、nextElementSibling,previousSibling、previousElementSibling  兄弟节点也有兼容问题,

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<ul id="fat">
			<li></li>
			<li id="chi"></li>
			<li></li>
		</ul>
	</body>
	<script type="text/javascript">
		var oFat=document.getElementById('fat');
		var oChi=document.getElementById('chi');
		
		function first(ele){  //首节点获取并实现兼容的函数
			if(ele.firstElementChild){
				return ele.firstElementChild; //非IE
			}
			else{
				return ele.firstChild;  //IE
			}
		}
		
		function last(ele){  //尾节点获取并实现兼容的函数
			if(ele.lastElementChild){
				return ele.lastElementChild;
			}
			else{
				return ele.lastChild;
			}
		}
		
		function nextbro(ele){  //获取下一个兄弟节点并实现兼容的函数
			if(ele.nextElementSibling){
				return ele.nextElementSibling;
			}
			else{
				return ele.nextSibling;
			}
		}
		
		function prebro(ele){  //获取上一个兄弟节点并实现兼容函数
			if(ele.previousElementSibling){
				return ele.previousElementSibling;
			}
			else{
				return ele.previousSibling;
			}
		}
		console.log(prebro(oChi));
		
	</script>
</html>


要注意在解决兼容问题要先对每个方法进行测试,一般是检测对IE的兼容;

3.用className选择元素:

前面我们用过id、标签名获取元素,兼容性比较好,但是通过类名获取元素不兼容ie浏览器。这里我们自己声明一个函数,封装以后可以使用。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		
	</head>
	<body>
		<ul id="list">
			<li class="box"></li>
			<li></li>
			<li class="box"></li>
			<li></li>
			<li class="box"></li>
		</ul>
	</body>
	<script type="text/javascript">
//		var oUl=document.getElementById('list');
//		var aLi=oUl.getElementsByTagName('li');
//		
//		for(var i=0;i<aLi.length;i++){  //此循环可以使我们在IE中使用类名查找元素
//			if(aLi[i].className=='box'){
//				aLi[i].style.background='blue';
//			}
//		}

		function getByClass(oFat,sclass){   //在IE中使用类名查找元素的函数;(封装)
			var aResult=[];
			var aEles=oFat.getElementsByTagName('*');
			
			for(var i=0;i<aEles.length;i++){
				if(aEles[i].className==sclass){
					aResult.push(aEles[i]);
				}
			}
			return aResult;
		}
		
		var oUl=document.getElementById('list');
		var aBox=getByClass(oUl,'box');  //将获取的元素赋给一个数组变量方便使用
		
		for(i=0;i<aBox.length;i++){
			aBox[i].style.background='blue';
		}
		console.log(aBox.length);
		
	</script>
</html>
4.DOM方式操作元素属性:

4.1.获取:getAttribute(名称)

4.2.设置:setAttribute(名称, 值)

4.3.删除:removeAttribute(名称)

<!DOCTYPE HTML>
<html>

	<head>
		<meta charset="utf-8">
		<title>无标题文档</title>

	</head>

	<body>
		<input id="txt1" type="text" />
		<input id="btn1" type="button" value="按钮" />
	</body>
	<script>
		var oTxt = document.getElementById('txt1');
		var oBtn = document.getElementById('btn1');

		oBtn.onclick = function() {
			//oTxt.value='asdfasd';
			//oTxt['value']='xczcvb';

			oTxt.setAttribute('value', 'erwertwert');
		};
	</script>

</html>

5.创建DOM元素

5.1.createElement(标签名) 创建一个节点
5.2.appendChild(节点) 追加一个节点:这个插入节点是在ul里面的后面增加的

<!DOCTYPE HTML>
<html>

	<head>
		<meta charset="utf-8">
		<title>无标题文档</title>
	</head>

	<body>
		<input id="btn1" type="button" value="创建li" />
		<ul id="ul1">
		</ul>
	</body>
	<script>
		var oBtn = document.getElementById('btn1');
		var oUl = document.getElementById('ul1');

		oBtn.onclick = function() {
			var oLi = document.createElement('li');

			//父级.appendChild(子节点);
			oUl.appendChild(oLi);
		};
	</script>
</html>

6.插入 DOM 元素:insertBefore(节点, 原有节点) 在已有元素前插入,同时,为了让节点有值,需要添加一个文本表单

<!DOCTYPE HTML>
<html>

	<head>
		<meta charset="utf-8">
		<title>无标题文档</title>

	</head>

	<body>
		<input id="txt1" type="text" />
		<input id="btn1" type="button" value="创建li" />
		<ul id="ul1">
		</ul>
	</body>
	<script>
		
			var oBtn = document.getElementById('btn1');
			var oUl = document.getElementById('ul1');
			var oTxt = document.getElementById('txt1');

			oBtn.onclick = function() {
				var oLi = document.createElement('li');
				var aLi = oUl.getElementsByTagName('li');

				oLi.innerHTML = oTxt.value;

				if(aLi.length > 0) {   
					oUl.insertBefore(oLi, aLi[0]);
				} else {
					oUl.appendChild(oLi);
				}
			}
	</script>

</html>

7.删除DOM元素:removeChild(节点) 删除一个节点

<!DOCTYPE HTML>
<html>
	<head>
		<meta charset="utf-8">
		<title>无标题文档</title>
		</script>
	</head>
	<body>
		<ul id="ul1">
			<li>asfasd
				<a href="javascript:;">删除</a>
			</li>
			<li>5645
				<a href="javascript:;">删除</a>
			</li>
			<li>ghdfjgj
				<a href="javascript:;">删除</a>
			</li>
			<li>mvbnmvnb
				<a href="javascript:;">删除</a>
			</li>
		</ul>
	</body>
	<script>
		var aA=document.getElementsByTagName('a');
		var oUl=document.getElementById('ul1');

		for(var i=0;i<aA.length;i++) {
			aA[i].οnclick=function() {
				oUl.removeChild(this.parentNode);
			}
		}
</html>





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值