DOM


什么是DOM树

DOM(Document Object Model)即文档对象模型。通过DOM树这样一种结构,不​仅可以直观的看到HTML的整体结构,还可以利用DOM树的一些属性获取到某个元素的子节点和节点名称等信息。

HTML DOM是HTML的标准对象模型和编程接口。其定义了: 所有的DOM对象主要有以下部分组成:

DOM的节点

名称nodeTypenodeNamenodeValue说明
元素(标签)节点Node.ELEMENT_NODE(1)大写的标签名null对应html标签元素
属性节点Node.ATTRIBUTE_NODE(2)属性名属性值对应html标签的属性,只存在于元素的属性中,并不是dom文档的一部分
文本节点Node.TEXT_NODE(3)#text标签内容对应html标签中的文本内容
CDATA节点Node.CDATA_SECTION_NODE(4)#cdata-sectionCDATA区域中的内容只出现在XML文档中,表示的是CDATA区域
实体引用名称节点Node.ENTRY_REFERENCE_NODE(5)实体引用的名称null只出现在XML中
实体名称节点Node.ENTITY_NODE(6)实体名称null只出现在XML中
处理指令节点Node.PROCESSING_INSTRUCTION_NODE(7)targetentire content excluding the target
注释节点Node.COMMENT_NODE(8)#comment注释的内容<!--注释-->
文档节点Node.DOCUMENT_NODE(9)#documentnull表示HTML文档,也称为根节点,指向document对象
文档类型节点Node.DOCUMENT_TYPE_NODE(10)doctype的名称null包含与文档doctype有关的所有信息
文档片段节点Node.DOCUMENT_FRAGMENT_NODE(11)#document-fragmentnull表示HTML文档,也称为根节点,指向document对象
DTD声明节点Node.NOTATION_NODE(12)符号名称nullDTD中声明的符号

本页的所有节点

节点的属性和方法

节点类型方法&属性说明
所有.nodeType属性:返回节点类型的代码,只读
所有.nodeName属性:返回节点类型名,只读
所有.nodeValue属性:返回/设置节点的文本内容(仅文本节点、注释节点有效,元素节点返回null)
document
element
.getElementsByClassName(cssClass)通过元素的类名获取(即class属性的值)动态HTMLCollection空HTMLCollection
document
element
.getElementsByTagName(tagName)通过标签获取动态HTMLCollection空HTMLCollection
document
element非标准
.getElementsByName()通过节点的name属性获取(返回值包含非元素节点)动态NodeList空NodeList
document
element
.querySelectorAll(selector)根据CSS选择器获取(虽返回NodeList,但其仅支持element)静态NodeList空NodeList
document
element
.querySelector(selector)根据CSS选择器获取第一个(虽返回NodeList,但其仅支持element)静态单个Elementnull
element.closest(selector)从当前元素开始向上遍历祖先节点(包括自身),返回第一个匹配指定选择器的元素。静态单个Elementnull

本页的所有元素(标签)节点


<script>
function thisDomShowElem(V_obj,V_index)
{
	var x=V_obj.childNodes;
	x.forEach(function(e){
		if(e.nodeType==1)
		{
			var txt="";
			for(var i=0;i<V_index;i++)
			{txt+="--------";}
			document.write(txt+"<"+e.nodeName+"><br>");
			if(e.childNodes.length>0)
			{thisDomShowElem(e,V_index+1);}
		}
	});
}
var x1=document.childNodes;
x1.forEach(function(a){
if(a.nodeType==1)
	{
		document.write("<"+a.nodeName+"><br>");
		if(a.childNodes.length>0)
		{thisDomShowElem(a,1);}
	}
});
</script>