首页 > 代码库 > javascript中的子节点查找,childNodes和children

javascript中的子节点查找,childNodes和children

一、查找元素:

1.getElementById():接收一个参数:要取得的元素的 ID。如果找到相应的元素则返回该元素,如果不存在带有相应 ID 的元素,则返回 null。严格匹配,包括大小写。

IE7 及较低版本还为此方法添加了一个有意思的“怪癖”: name 特性与给定 ID 匹配的表单元素(<input>、<textarea>、 <button>及<select>)也会被该方法返回。如果有哪个表单元素的 name 特性等于指定的 ID,而且该元素在文档中位于带有给定 ID 的元素前面,那么 IE 就会返回那个表单元素。

2.getElementsByTagName()。这个方法接受一个参数,即要取得元素的标签名,而返回的是包含零或多个元素的 NodeList。

3.getElementsByName()。顾名思义,这个方法会返回带有给定 name 特性的所有元素。最常使用 getElementsByName()方法的情况是取得单选按钮。

 

二、查找元素直接点:

1.元素.childNodes : 只读 属性 子节点列表集合,包含文本和元素类型的节点。

2.元素.children:只读 属性 子节点列表集合,只包含元素类型节点。

3.元素.nodeType : 只读 属性 当前元素的节点类型
元素节点:1
属性节点:2
文本节点:3

  

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>子节点</title>
<script>
window.onload = function() {
	var oDiv = document.getElementById(‘div1‘);
	var len = oDiv.childNodes.length;

	alert(len);	//ie8 -- 1; ie9~ie11 -- 3,包含span前后换行

	/*找出当前元素只包含同样还是元素的子节点的两种方法*/
	for(var i=0; i<len; i++){
		if(oDiv.childNodes[i].nodeType == 1){
			console.log(oDiv.childNodes[i]);   //<span></span>
		}
	}

	alert(oDiv.children.length);//ie8~ie11 -- 1
	
}
</script>
</head>

<body>
    <div id="div1">
    	<span></span>
    </div>
</body>
</html>

  

  

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>子节点</title>
<script>
window.onload = function() {
	var oDiv = document.getElementById(‘div1‘);
	var len = oDiv.childNodes.length;

	alert(len);	//ie8 -- 2,包含注释和span; ie9~ie11 -- 5,包含注释,换行和span

	/*找出当前元素只包含同样还是元素的子节点的两种方法*/
	for(var i=0; i<len; i++){
		if(oDiv.childNodes[i].nodeType == 1){
			console.log(oDiv.childNodes[i]);   //<span></span>
		}
	}

	alert(oDiv.children.length);//ie8 -- 2,包含注释和span;	ie9~ie11 -- 1,只包含span
	
}
</script>
</head>

<body>
    <div id="div1">
      <!-- 嘿嘿 -->
    	<span></span>
    </div>
</body>
</html>

  总结:IE8中children 和childNodes属性表现一样,包含注释节点和元素节点。但 IE9 之后的版本children只返回元素节点,childNodes返回注释,空白,和元素节点。

  

javascript中的子节点查找,childNodes和children