日期:2014-05-16  浏览次数:20297 次

javascript DOM(五)----插入、删除节点

?

插入节点:

1). insertBefore(): 把一个给定节点插入到一个给定元素节点的给定子节点的前面

? var reference = ?element.insertBefore(newNode,targetNode);

? ? ? ? ?节点 newNode 将被插入到元素节点 element 中并出现在节点 targetNode 的前面. 节点 targetNode 必须是 element 元素的一个子节点。 ?

? ? 2). 自定义 insertAfter() 方法 ? ??

? ? /**

* 将 newChild 插入到 refChild 的后边

* @param {Object} newChild

* @param {Object} refChild

*/

function insertAfter(newChild, refChild){

var refParentNode = refChild.parentNode;

//判断 refChild 是否存在父节点

if(refParentNode){

//判断 refChild 节点是否为其父节点的最后一个子节点

if(refChild == refParentNode.lastChild){

refParentNode.appendChild(newChild);

}else{

refParentNode.insertBefore(newChild, refChild.nextSibling);

}

}

}

?

代码:

?

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Untitled Document</title>
		<script type="text/javascript">
			
			window.onload = function(){
				//1. 新建一个 "<li>伦敦</li>", 并将该节点添加到 #dj 的前边
				var ld = document.createElement("li");
				ld.appendChild(document.createTextNode("伦敦"));
				
				document.getElementById("city").insertBefore(ld, document.getElementById("dj"));
				
				//2. 新建一个 "<li>纽约</li>", 并将该节点添加到 #dj 的后边
				var ny = document.createElement("li");
				ny.appendChild(document.createTextNode("纽约"));
				insertAfter(ny, document.getElementById("dj"));
				
				//3. 新建一个 "<li>芝加哥</li>", 并将该节点添加到 "首尔" 节点的后边
				var zjg = document.createElement("li");
				zjg.appendChild(document.createTextNode("芝加哥"));
				insertAfter(zjg, document.getElementById("city").lastChild);
			};
			
			/**
			 * 把 newChild 放到 targetChild 节点的后边
			 * @param {Object} newChild
			 * @param {Object} targetChild
			 */
			function insertAfter(newChild, targetChild){
				//1. 获取 targetChild 的父节点
				var parentNode = targetChild.parentNode;
				
				//2. 判断 targetChild 节点是否为其父节点的最后一个子节点
				if(parentNode){
					//3. 若是最后一个子节点: 则直接把 newChild 加为 targetChild 父节点的子节点即可
					if(parentNode.lastChild == targetChild){
						parentNode.appendChild(newChild);
					}
					//4. 若不是最后一个子节点: 则先获取 targetChild 节点的下一个兄弟节点, 然后调用 insertBefore() 方法
					else{
						parentNode.insertBefore(newChild, targetChild.nextSibling);						
					}
				}
			}
						
		</script>
		
	</head>
	<body>
		<p>你喜欢哪个城市?</p>
		<ul id="city">
			<li id="bj" name="BeiJing">北京</li>
			<li>上海</li>
			<li id="dj">东京</li>
			<li>首尔</li>
		</ul>
		
		<br><br>
		<p>你喜欢哪款单机游戏?</p>
		<ul id="game">
			<li id="rl">红警</li>
			<li>实况</li>
			<li>极品飞车</li>
			<li>魔兽</li>
		</ul>
		
		<br><br>
		gender: 
			<input type="radio" name="gender" value="male"/>Male
			<input type="radio" name="gender" value="female"/>Female
	</body>
</html>