【JavaScript】DOM节点常用方法介绍02

DOM节点常用方法介绍02

1.替换节点
replaceChild()
把一个给定父元素里的一个子节点替换为另外一个子节点
var reference = element.replaceChild(newChild,oldChild);
返回值是一个指向已被替换的那个子节点的引用指针。
如果被插入的子节点还有子节点,则那些子节点也被插入到目标节点中

例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<title>js测试</title>
		
	</head>
	<body> 
	   
	  您喜欢的城市:<br> 
	   <ul>
	   	 <li id="bj" value="beijing">北京</li>
		 <li id="sh" value="shanghai">上海</li>
		 <li id="cq" value="chongqing"> 重庆</li>
	   </ul>
	  
	  您喜欢的游戏:<br> 
	   <ul>
	   	 <li id="fk" value="fangkong">反恐<p>xxx</p></li>
		 <li id="ms" value="moshou">魔兽</li>
		 <li id="cq" value="chuanqi">传奇</li>
	   </ul>   
	   
	    <script language="javascript">
			//点击北京节点,将被反恐节点替换
			
			//改写北京节点的onclick方法
			document.getElementById("bj").onclick=function(){
				
				//获取反恐节点
				var fkElement=document.getElementById("fk");
				//获取北京节点的父节点
				var bjParentElement=this.parentNode;
			
				//替换(反恐的子节点xxx也过去)
				var oldElement=bjParentElement.replaceChild(fkElement,this);
				
				//测试
				alert(oldElement.getAttribute("value"));
			}


	    </script>
	</body>


</html>

2.查找属性节点
getAttribute()   
返回一个给定元素的一个给定属性节点的值
var attributeValue = element.getAttribute(attributeName);
给定属性的名字必须以字符串的形式传递给该方法。
给定属性的值将以字符串的形式返回,如果给定属性不存在,getAttribute() 将返回一个空字符串.


通过属性获取属性节点
getAttributeNode(属性的名称)--Node

例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<title>js测试</title>
		
	</head>
	<body> 
	   
	   您喜欢的城市:<br> 
	   <ul>
	   	 <li id="bj" value="beijing">北京</li>
		 <li id="sh" value="shanghai">上海</li>
		 <li id="cq" value="chongqing">重庆</li>
	   </ul>
	  
	  您喜欢的游戏:<br> 
	   <ul>
	   	 <li id="fk" value="fangkong">反恐</li>
		 <li id="ms" value="moshou">魔兽</li>
		 <li id="xj" value="xingji">星际争霸</li>
	   </ul>   
	   
	    <script language="javascript">
			//获取"星际争霸"节点的value值
			var xjElement=document.getElementById("xj");
			alert(xjElement.getAttribute("value"));
			
			
	    </script>
	</body>


</html>

3.设置属性节点
setAttribute()
将给定元素节点添加一个新的属性值或改变它的现有属性的值。
   element.setAttribute(attributeName,attributeValue);
属性的名字和值必须以字符串的形式传递给此方法
如果这个属性已经存在,它的值将被刷新;
如果不存在,setAttribute()方法将先创建它再为其赋值。

例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<title>js测试</title>
		
	</head>
	<body> 
	   
	   您喜欢的城市:<br> 
	   <ul>
	   	 <li id="bj" value="beijing">北京</li>
		 <li id="sh" value="shanghai">上海</li>
		 <li id="cq" value="chongqing">重庆</li>
	   </ul>
	  
	  您喜欢的游戏:<br> 
	   <ul>
	   	 <li id="fk" value="fangkong">反恐</li>
		 <li id="ms" value="moshou">魔兽</li>
		 <li id="xj" value="xingji">星际争霸</li>
	   </ul>   
	   
	    <script language="javascript">
			//获取"星际争霸"节点,并增加一个name属性
			var xjElement=document.getElementById("xj");
			
			//获取当前属性
			alert(xjElement.getAttribute("name"));
			
			//增加属性
			xjElement.setAttribute("name","xingjizhengba");
			
			//获取增加后的属性
			alert(xjElement.getAttribute("name"));


	    </script>
	</body>


</html>

4.创建新元素节点
createElement()
按照给定的标签名创建一个新的元素节点。方法只有一个参数:将被创建的元素的名字,是一个字符串.
  var reference = document.createElement(element);
方法的返回值:是一个指向新建节点的引用指针。返回值是一个元素节点,所以它的 nodeType 属性值等于 1。
新元素节点不会自动添加到文档里,新节点没有 nodeParent 属性,它只是一个存在于 JavaScript 上下文的对象.
var pElement = document.createElement("p");

5.创建文本节点
createTextNode()
创建一个包含着给定文本的新文本节点。这个方法的返回值是一个指向新建文本节点引用指针。
  var textNode = document.createTextNode(text);
方法只有一个参数:新建文本节点所包含的文本字符串
方法的返回值:是一个指向新建节点的引用指针。它是一个文本节点,所以它的 nodeType 属性等于 3.
新元素节点不会自动添加到文档里,新节点没有 nodeParent 属性
var pElementText=document.createElement("li");
var textElement=document.createTextNode("南京");
pElementText.appendChild(textElement);

6.插入节点1
appendChild()
为给定元素增加一个子节点:                                   
   var newreference = element.appendChild(newChild).              
   给定子节点 newChild 将成为给定元素节点 element 的最后一个子节点。
方法的返回值是一个指向新增子节点的引用指针。
该方法通常与 createElement() createTextNode() 配合使用
新节点可以被追加给文档中的任何一个元素

4和5、6综合例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<title>js测试</title>
		
	</head>
	<body> 
	   
	   您喜欢的城市:<br> 
	   <ul id="city">
	   	 <li id="bj" value="beijing">北京</li>
		 <li id="sh" value="shanghai">上海</li>
		 <li id="cq" value="chongqing">重庆</li>
	   </ul>
	  
	  您喜欢的游戏:<br> 
	   <ul>
	   	 <li id="fk" value="fangkong">反恐</li>
		 <li id="ms" value="moshou">魔兽</li>
		 <li id="xj" value="xingji">星际争霸</li>
	   </ul>
	   
	    <script language="javascript">
			//增加城市节点<li id="tj" value="tianjing">天津</li>
			
			//<li></li>
			var liElement=document.createElement("li");
			
			//设置属性<li id="tj" value="tianjing"></li>
			liElement.setAttribute("id","tj");
			liElement.setAttribute("value","tianjing");
			
			//创建文本节点"天津"
			var textElement=document.createTextNode("天津");
			
			//增加文本节点"天津"到<li id="tj" value="tianjing"></li>形成<li id="tj" value="tianjing">天津</li>
			liElement.appendChild(textElement);
			
			//获取父节点
			var cityElement=document.getElementById("city");
			
			//添加<li id="tj" value="tianjing">天津</li>到父节点下
			cityElement.appendChild(liElement);
			
	    </script>
	</body>


</html>

刷新界面后多出了一个"天津"节点,但是我们查看源代码,发现没有"天津"节点,原因是因为我们用过js动态添加的代码通过浏览器的源码查看器是查看不出来的。如果是jsp转过来的是可以看到的。

4和5、6例子2:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<title>js测试</title>
		
	</head>
	<body> 
	   
	     <select name="edu" id="edu">
	   	  <option value="博士">博士^^^^^</option>
		  <option value="硕士">硕士^^^^^</option>
		  <option value="本科">本科^^^^^</option>
		  <option value="幼儿园">幼儿园^^^^^</option>
	   </select>


	    <script language="javascript">
			//增加节点<option value="大专">大专^^^^^</option>
			
			//创建<option value="大专">大专^^^^^</option>
			var optionElement=document.createElement("option");
			optionElement.setAttribute("value","大专");
			var textElement=document.createTextNode("大专^^^^^");
			optionElement.appendChild(textElement);
			
			//获取id="edu"节点
			var eduElement=document.getElementById("edu");
			
			//添加
			eduElement.appendChild(optionElement);
			
	    </script>
	</body>


</html>

7.插入节点2
insertBefore()
把一个给定节点插入到一个给定元素节点的给定子节点的前面
  var reference =  element.insertBefore(newNode,targetNode);
  节点 newNode 将被插入到元素节点 element 中并出现在节点 targetNode 的前面.
节点 targetNode 必须是 element 元素的一个子节点。
该方法通常与 createElement() 和 createTextNode() 配合使用

例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<title>js测试</title>
		
	</head>
	<body> 
	   
	     <ul>
	   	 <li id="bj" name="beijing">北京</li>
		 <li id="sh" name="shanghai">上海</li>
		 <li id="cq" name="chongqing">重庆</li>
	   </ul>


	    <script language="javascript">
			// 插入新的节点 <li id="tj" name="tianjin">天津</li>
			// 在 <li id="cq" name="chongqing">重庆</li>的前面
			
			//创建 <li id="tj" name="tianjin">天津</li>
			var tjElement=document.createElement("li");
			tjElement.setAttribute("id","tj");
			tjElement.setAttribute("value","tianjing");
			var textElement=document.createTextNode("天津");
			tjElement.appendChild(textElement);
			  
			//获取重庆 <li id="cq" name="chongqing">重庆</li>
			 var cqElement=document.getElementById("cq");
			  
			//获取重庆节点的父节点
			  var ulElement=cqElement.parentNode;
			
			//插入到重庆前
			 ulElement.insertBefore(tjElement,cqElement);
			
	    </script>
	</body>


</html>

8.插入节点3
DOM 没有提供 insertAfter() 方法
我们用自己的实现方式去实现类似于insertAfter() 的方法

例子1:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<title>js测试</title>
		
	</head>
	<body> 
	   
	     <ul>
	   	 <li id="bj" name="beijing">北京</li>
		 <li id="sh" name="shanghai">上海</li>
		 <li id="cq" name="chongqing">重庆</li>
	   </ul>


	    <script language="javascript">
			// 插入新的节点 <li id="tj" name="tianjin">天津</li>
			// 在 <li id="cq" name="chongqing">上海</li>的后面
			
			//创建 <li id="tj" name="tianjin">天津</li>
			var tjElement=document.createElement("li");
			tjElement.setAttribute("id","tj");
			tjElement.setAttribute("value","tianjing");
			var textElement=document.createTextNode("天津");
			tjElement.appendChild(textElement);
			  
			//获取上海 <li id="cq" name="chongqing">重庆</li>
			 var shElement=document.getElementById("sh");
			  
			//获取上海节点的下一个兄弟节点重庆
			  var nextElement=shElement.nextSibling;
			
			//获取上海节点的父亲节点
			 var shParentElement=shElement.parentNode;
			 
			 //添加到上海节点的下一个兄弟节点重庆的前面
			 shParentElement.insertBefore(tjElement,nextElement);
			
	    </script>
	</body>


</html>

例子2:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<title>js测试</title>
		
	</head>
	<body> 
	   
	     <ul> 
			 <li id="cq" name="chongqing">重庆</li>
			 <li id="bj" name="beijing">北京</li>
			 <li id="sh" name="shanghai">上海</li>
	     </ul>


	    <script language="javascript">
			// 插入新的节点 <li id="tj" name="tianjin">天津</li> 到<li id="sh" name="shanghai">上海</li>这个节点
			// 如上海节点是最后一个节点插入到该节点的<li id="sh" name="shanghai">上海</li>的后面,
			// 否则插入到该节点的前面
			
			//创建<li id="tj" name="tianjin">上海</li>节点
			var liElement=document.createElement("li");
			liElement.setAttribute("id","tj");
			liElement.setAttribute("name","tianjin");
			var textElement=document.createTextNode("天津");
			liElement.appendChild(textElement);
			
			//获取上海节点
			var shElement=document.getElementById("sh");
			
			//获取上海节点的父节点
			var shParentElement=shElement.parentNode;
			
			//获取上海节点的父节点中的最后一个子节点
			var lastChildParentElement=shParentElement.childNodes[5];
			
			//比对上海节点和上海节点的父节点中的最后一个子节点
			if(shElement == lastChildParentElement){
				//如果相等,表示上海节点是最后一个节点,此时插入上海节点的后面
				shParentElement.appendChild(liElement);
			}else{
				//如果不相等,表示上海节点不是最后一个节点,此时插入上海节点的前面
				shParentElement.insertBefore(liElement,shElement);
			}


	    </script>
	</body>


</html>

9.删除节点
removeChild()
从一个给定元素里删除一个子节点
   var reference = element.removeChild(node);
返回值是一个指向已被删除的子节点的引用指针。
某个节点被removeChild()方法删除时,这个节点所包含的所有子节点将同时被删除。

例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<title>js测试</title>
		
	</head>
	<body> 
	   
	     <ul> 
			 <li id="cq" name="chongqing">重庆</li>
			 <li id="bj" name="beijing">北京</li>
			 <li id="sh" name="shanghai">上海</li>
	     </ul>


	    <script language="javascript">
			//删除<ul id="city"> 下<li id="bj" name="beijing">北京</li>这个节点</ul>
			
			//获取子节点
			var bjElement=document.getElementById("bj");
			
			//获取父节点
			var cityElement=bjElement.parentNode;
			
			//删除
			var oldElement=cityElement.removeChild(bjElement);
			
			//测试
			alert("被删除的节点的id是:"+oldElement.getAttribute("id"));
			
	    </script>
	</body>


</html>

10.遍历节点树

(1)遍历
ChildNodes:返回一个数组,这个数组由给定元素节点的子节点构成:
var nodeList = node.childNodes;
文本节点和属性节点都不可能再包含任何子节点,所以它们的 ChildNodes 属性永远会返回一个空数组。
如果想知道某个元素有没有子节点,可以用 hasChildNodes 方法。
如果想知道某个元素有多少个子节点,可以用 childNodes 数组的 length 属性。
childNodes 属性是一个只读属性。

(2)获取第一个子节点
firstChild:该属性返回一个给定元素节点的第一个子节点,返回这个节点对象的指针。
    var reference = node.firstChild;
文本节点和属性节点都不可能包含任何子节点,所以它们的 firstChild 属性永远会返回 null。
某个元素的 firstChild 属性等价于这个元素的 childNodes 节点集合中的第一个节点,即:
  var reference = node.ChildNodes[0];
firstChild 属性是一个只读属性。

(2)获取最后一个子节点
lastChild:对应 firstChild 的一个属性。
nextSibling: 返回一个给定节点的下一个兄弟节点。
parentNode:返回一个给定节点的父节点。
parentNode 属性返回的节点永远是一个元素节点,因为只有元素节点才有可能包含子节点。
document 节点的没有父节点。
previousSibling:返回一个给定节点的上一个兄弟节点

例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<title>js测试</title>
		
	</head>
	<body> 
	   
	     <ul> 
			 <li id="cq" name="chongqing">重庆</li>
			 <li id="bj" name="beijing">北京</li>
			 <li id="sh" name="shanghai">上海</li>
	     </ul>


	    <script language="javascript">
			//遍历节点树并输出每个节点的名称
			
			//获取ul节点
			var ulELement=document.getElementsByTagName("ul");
			
			//获取ul节点的节点树
			var ulChildNodes=ulELement[0].childNodes;
			
			//遍历
			for(var i=0;i< ulChildNodes.length;i++){
				alert(ulChildNodes[i].nodeName);
			}
			
			
	    </script>
	</body>


</html>

11.innerHTML属性
浏览器几乎都支持该属性,但不是 DOM 标准的组成部分。
innerHTML 属性可以用来读,写某给定元素里的 HTML 内容。

例子:(在div层中插入 <h1>今天</h1>)
老方法:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<title>js测试</title>
		
	</head>
	<body> 
	   
	    <div id="city"></div>


	    <script language="javascript">
			//在div层中插入 <h1>今天</h1>
			
			//创建<h1>今天</h1>
			var jintianElement=document.createElement("h1");
			var textElement=document.createTextNode("今天");
			jintianElement.appendChild(textElement);
			
			//获取div节点
			var divElement=document.getElementById("city");
			
			//添加
			divElement.appendChild(jintianElement);
			
	    </script>
	</body>


</html>

使用innerHTML的方法
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<title>js测试</title>
		
	</head>
	<body> 
	   
	    <div id="city"></div>


	    <script language="javascript">
			//在div层中插入 <h1>今天</h1>
			document.getElementById("city").innerHTML="<h1>今天</h1>";
	    </script>
	</body>


</html>
转载请注明出处:http://blog.csdn.net/acmman/article/details/47946639

你可能感兴趣的:(JavaScript,dom)