八、DOM(一) -- DOM对象

一、 DOM基础

1.1 什么是DOM

	DOM(Document Objecevt Model) :文档对象模型
	
	1) DOM 是W3C(万维网联盟)的标准。它是一个规范,而不是某个特定编程语言的实现。
	   所以不仅是js有DOM,任何一种语言都可以实现DOM的规范。
	   
	2) DOM 定义了访问和操作HTML文档的标准接口。
	   其作用是用对象描述文档。通过DOM可以改变网页的内容、结构和样式。
	
	3) DOM 将文档描述成一个由节点层级构成的树结构。

1.2 DOM树

	1) DOM中,所有事物都是节点。
	   DOMHTML文档的各个部分都描述为一个对象,我们称之为节点(Node)。节点是构成文档树的最基本的组成部分。

	2) DOMHTML文档描述为一个文档树。整个文档树使用了document对象来描述。
	
	

在这里插入图片描述

1.3 具体操作可以使用API文档。
1)方式一: 使用文档DHTML.chm文档

切记:此文档很重要
在这里插入图片描述

2)方式二 : 使用在线文档

https://www.w3school.com.cn/jsref/dom_obj_all.asp

二、DOM节点

HTML DOM 中,所有事物都是节点。DOM 是被视为节点树的 HTML
2.1 节点对象
1)节点对象分类
	
 	+++ Node节点对象分类:	
 
				文档节点: 1、文档本身是文档节点 (Document类型对象)
						 2、document对象是Document构造函数的实例。
						    浏览器提供了document对象,浏览器页面中可以直接使用   
			
						
				元素节点: HTML标签(Element类型的对象)
				
				属性节点: HTML标签的属性(Attr类型的对象)
				
				文本节点: HTML标签内的文本。(空白文本也是文本节点)(Text类型的对象)
						
				注释节点:注释是注释节点
				

	
 	+++ Node节点对象之间的关系:	
 	
				 1、Node对象就是节点对象,它是DOM中最基础的对象。在DOM中所有事物都被看作为节点对象。
				 
				 2、Node对象分为Document、Text、Attr、Element等类型的对象。
				   这些构造函数都直接或间接继承了Node构造函数。(通过原型链实现)		
				 
				 3、document对象是浏览器为我们提供了Document构造函数的实例,该对象我们可以直接使用。
				
	
>>>>>> Node节点对象的分类

Node节点对象分为Document、Attr、Element、Text等类型的对象。
这些构造函数都直接或间接继承了Node构造函数。

 
    //文档节点。docuemnt对象是浏览器提供的Document的实例,可直接使用
    console.log(document);
    console.log(document instanceof Document);  //true
    console.log(document instanceof Node);      //true

    //元素节点。
    var s=document.getElementById("cc");
    console.log(s instanceof Element);       //true
    console.log(s instanceof Node);         //true

    //属性节点
    var attr=s.getAttribute("id")
    console.log(attr instanceof Attr);    //true
    console.log(attr instanceof Node);     //true

>>>>>> Document、Attr、Element、Text都直接或间接继承了Node构造函数(通过原型链实现继承关系)

	console.log(Document.prototype.__proto__);
    console.log(Element.prototype.__proto__);
    console.log(Text.prototype.__proto__.__proto__);
    console.log(Attr.prototype.__proto__);
    

在这里插入图片描述

2)Node基本属性
	 
	 每个节点对象都拥有这些属性。这些属性是:

				nodeName(节点名称)
				nodeValue(节点值)
				nodeType(节点类型)	

在这里插入图片描述

3)节点注意事项
		
		1、文本或者是空白文本也是节点。
		
		2、子节点和子元素节点是完全不同。
				子节点指的是所有类型的节点,包含空白文本,即文本节点。
 				子元素节点指的就是元素节点。
		
>>>>>> 空白文本也是节点。即文本节点

获取div的子节点,由于空白文本也是文本节点,所以,第一个子节点就是空白文本。


<body>
    <div  class="outer">
        <div class="inner"></div>
    </div>
</body>

<script>

    //根据css选择器获取元素对象。如果有多个,也只返回一个
    var elem=document.querySelector(".outer");
    
    //获取元素的第一个子节点
    var node=elem.firstChild
    console.log(node)  // #text

</script>
    

获取div的子节点,由于空白文本也是文本节点,但是div内部第一个元素没有空白,所以,第一个子节点就是inner的div。


<body>
    <div  class="outer"><div class="inner"></div>
    </div>
</body>

<script>

    //根据css选择器获取元素对象。如果有多个,也只返回一个
    var elem=document.querySelector(".outer");
    
    //获取元素的第一个子节点
    var node=elem.firstChild
    console.log(node)  //

</script>

在这里插入图片描述

>>>>>> 子节点和子元素节点是不同的概念
<body>
    <div  class="outer">
        <div class="inner"></div>
    </div>
</body>

<script>

    //根据css选择器获取元素对象。如果有多个,也只返回一个
    var elem=document.querySelector(".outer");
    
    //获取元素的第一个子节点
    var node=elem.firstChild
    console.log(node)  //


    //获取元素的第一个子元素节点
    var node=elem.firstElementChild
    console.log(node)  //


</script>

在这里插入图片描述

2.2 Document节点对象
		
	1、document对象是浏览器为我们提供的Document构造函数的实例对象。
 	   它代表文档节点对象。我们可以直接使用。
	
	2、这个对象是window的属性,可以在页面中直接使用,文档节点对象代表整个HTML
1) document对象常用属性
	
	document.body			  获取body标签对象
	document.documentElement  获取html标签对象
	
	document.cookie		设置或返回与当前文档有关的所有 cookie。
	document.title		返回当前文档的标题。
	document.URL		返回当前文档的 URL

案例

  	//获取body标签对象
	var b1=document.body;
    console.log(b1)

  	//获取cookie
    var b2=document.cookie		
    console.log(b2)

  	//获取标题
    var b3=document.title		
    console.log(b3)

  	//获取URL
    var b4=document.URL		
    console.log(b4)

在这里插入图片描述

2) document对象常用方法

	document.getElementById()		返回对拥有指定 id 的第一个对象的引用。
	document.getElementsByName()	返回带有指定名称的对象集合。
	document.getElementsByTagName()	返回带有指定标签名的对象集合。

2.3 Element节点对象
	
	1、Element节点对象,即元素节点对象。 浏览器将HTML的元素封装为元素节点对象,即Element对象。	
	 
	2、Element对象可以拥有类型为元素节点、文本节点、注释节点的子节点。

1) Element对象常用属性
	
	+++ 设置或获取元素属性的值	
				elem.id				设置或返回元素的 id。
				elem.className		设置或返回元素的 class 属性。
				elem.style			设置或返回元素的 style 属性。
				elem.innerHTML		设置或返回元素的内容。
				elem.title			设置或返回元素的 title 属性。


				elem.accessKey		设置或返回元素的快捷键。
				elem.tabIndex		设置或返回元素的 tab 键控制次序。
				elem.textContent	设置或返回节点及其后代的文本内容。



	+++ 获取元素的属性
				elem.clientHeight	返回元素的可见高度。
				elem.clientWidth	返回元素的可见宽度。

				elem.tagName		返回元素的标签名。


				element.nodeName	返回元素的名称。
				element.nodeType	返回元素的节点类型。
				element.nodeValue	设置或返回元素值。



	+++ 获取其他元素
				elem.firstChild		获取元素的第一个子节点
				elem.lastChild		获取元素的最后一个子节点
				elem.childNodes		获取元素的所有子元素

				elem.attributes		返回元素属性的 NamedNodeMap。
				
				element.previousSibling		返回位于相同节点树层级的前一个元素。
				element.nextSibling			返回位于相同节点树层级的下一个节点。
				element.parentNode			返回元素的父节点。

>>>>>> 设置或获取元素的属性
    var ss=document.getElementById("cc")
    
    //设置或获取ID属性
    ss.id="newId"
    console.log(ss.id);
    
    //设置或获取class属性
    ss.className="newName"
    console.log(ss.className);
   
    //设置或获取style属性
    ss.style="width:100px;height:100px;background-color:red;";
    console.log(ss.style);

    //设置或获取标签内
    ss.innerHTML="xxx";
    console.log(ss.innerHTML);

在这里插入图片描述

>>>>>> 获取元素的属性

    var ss=document.getElementById("cc")
    ss.style="width:100px;height:100px;";
    
    console.log(ss.clientHeight)
    console.log(ss.clientWidth)
    console.log(ss.tagName)
    

在这里插入图片描述

>>>>>> 获取元素的其他子元素
    var elem=document.getElementById("cc")

    //返回元素的第一个子节点
    var b1=elem.firstChild;
    console.log(b1)

    //返回元素的最后一个子节点
    var b1=elem.lastChild;
    console.log(b1)

    //返回元素属性的 NamedNodeMap。
    var b1=elem.attributes;
    console.log(b1);
    
    //返回元素子节点的 NodeList。
    var b1=elem.childNodes;
    console.log(b1)
    
2) Element对象常用方法

    +++ 获取
    
			elem.getElementsByTagName()	返回拥有指定标签名的所有子元素的集合。
			elem.toString()		把元素转换为字符串。

    +++ 操作元素的属性	
			elem.setAttribute("cc","12")	把指定属性设置或更改为指定值。
			elem.removeAttribute("cc")	从元素中移除指定属性。
			elem.getAttribute("cc")	    返回元素节点的指定属性值。
	
	
			elem.setAttributeNode(attrNode)	设置或更改指定属性节点。
			elem.removeAttributeNode(attrNode)	移除指定的属性节点,并返回被移除的节点。
			elem.getAttributeNode()	返回指定的属性节点。
	


    +++ 操作子元素	
			elem.appendChild()	向元素添加新的子节点,作为最后一个子节点。
			elem.insertBefore()	在指定的已有的子节点之前插入新节点。
			elem.removeChild()	从元素中移除子节点。
			elem.replaceChild()	替换元素中的子节点。


    +++ 判断
			elem.hasClass("xxx") 判断一个元素中是否含有某个class
			elem.hasAttribute()	如果元素拥有指定属性,则返回true,否则返回 false。
			elem.hasChildNodes()	如果元素拥有子节点,则返回 true,否则 false。
			elem.hasAttributes()	如果元素拥有属性,则返回 true,否则返回 false
>>>>>> 操作元素属性

    var elem=document.getElementById("cc")

    //给元素设置属性
    elem.setAttribute("cc","ttttt");
    console.log(elem); //<div id="cc" class="ccc" cc="ttttt"></div>
    
    //获取元素属性
    var str=elem.getAttribute("cc");
    console.log(str);  //tttttt

    //删除元素属性
    elem.removeAttribute("cc");
    console.log(elem)  //<div id="cc" class="ccc" ></div>
    
    
>>>>>> 创建Attr属性节点对象,操作元素属性

    var elem=document.getElementById("cc")


    //创建attr对象
    var attr=document.createAttribute("xx")
    attr.value="123";
    elem.setAttributeNode(attr)
    console.log(elem)

    var attr2=elem.getAttributeNode("xx");
    console.log(attr2)

在这里插入图片描述

>>>>>> 操作子元素

    var elem=document.getElementById("cc")

    //在元素中插入div子元素
    var newElem=document.createElement("div");
    newElem.innerText="123"
    elem.appendChild(newElem);
    console.log(elem)


在这里插入图片描述

2.4 Attr节点对象、Text节点对象


	    Attr节点对象:	
	  			 	Attr节点对象,即属性节点对象。 
	  	 			浏览器将HTML的元素的属性封装为属性节点对象,即Attr对象。	
					
					
						var attr=document.createAttribute("xxx"); 创建属性节点对象					
						attr.name   获取属性节点名称					
						attr.value	获取或设置属性节点值	 
						

					
		Text节点对象:
					Text节点对象,即文本节点对象。


>>>>>> Attr节点对象
	
		//创建attr属性对象
	    var attr=document.createAttribute("xxx");
	    //设置attr属性对象的值
	    attr.value="21212";
	
	    console.log(attr.name);  //xxx
	    console.log(attr.value); //21212

>>>>>> Text节点对象

    var elem=document.getElementById("cc")

    //创建text文本节点
    var textNode=document.createTextNode("xxxxxxxxxxxx");
    console.log(textNode);


    //在元素中插入文本节点
    elem.append(textNode);

2.。33 事件
	
	元素节点的属性:
			
			elem.innerHTML
						可以获得元素内部的HTML代码。
			elem.innerText
						可以获得元素内部的文本内容。
						它和innerHTML类似,不同的是它会把html代码去除。
						
			elem.id
			elem.name
			elem.value
						
						
			elem.className  读取元素的class属性。
			  
	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值