JS_day10_DOM


DOM

全称documet object model,文档对象模型,由html+css组成 DOM利用js操作html+css

DOM的三种节点

<div id="box">你好</div>
//div 就是元素节点	所有元素标签是元素节点
//id就是属性节点		所有属性是属性节点
//你好就是文本节点		所有文本是文本节点

1.元素节点

操作元素节点

element,Element元素节点对象

查:获取元素节点的方式

通过选择器获取

id选择器:

通过id属性获取元素,里面的参数为string类型的id,返回值是一个htmlElement

var box = document.getElementById("box")	//获取id为box的元素
console.log(box)
class选择器

通过class属性名获取对应的元素,他传入的参数为string类型的class名字;

返回值是一个htmlCollectionof(Element),返回的是一个集合,这个集合里面存储了Element

htmlConllection是类似数组的一种结果,具备下标同时具备length

htmlConllection并不是一个数组,他不具备数组的方法,只是存在对应的下标和length属性,可能会有多个属性

var content = document.getElemnetsByClassName("content")
console.log(content[0])

所以我们可以通过下标来获取对应的htmlCollection里面的元素

标签选择器

里面传入的是一个标签名字的string字符串,返回的也是一个htmlCollection

var div = document.getElementsByTagName()
console.log(div)	//这里面是一个htmlCollection

通过下标来进行获取里面的元素

console.log(div[0])

通过name值来获取,返回的类型是一个nodeList,nodeList不是htmlCollection,但是他同样具备对应的下标和length属性,他的方法比htmlCollection要多

var divName = document.getElementsByName()
console.log(divName)
console.log(divName[0])
复合选择器

里面的参数为string类型的选择器,返回第一个匹配选择器的元素,返回的是一个元素element

var selectDiv = document.querySelector("div")
console.log(selectDiv)

返回所有匹配选择器的元素,接受的是一个nodeList

var selectAll = document.querySelectAll()
console.log(divName)
console.log(divName[0])
元素节点的属性

element内置的属性

element.属性名

className属性
var box = document.getElementById("box")
console.log(box.ClassName)	//返回class名字,同样可以进行赋值 set元素属性
box.className = 'jack'	//设置class属性名
tagName属性

获取标签名,document表示整个文档

var content = document.getElementById("content")
console.log(content.tagName)	//tagName是一个只读属性,不能进行获取

document表示整个文档,使用document,获取方法,是在全文中进行获取

var btns = document.getElementById("button")
console.log(btns)

缩小区域进行获取

首先获取content这个div,然后再在div里面进行获取button

var innerBtns = document.getElementById('content').getElementsByTagName('button')
//等同于
//var content = document.getElementById('content')
//var innerBtns = document.getElementsByTagName('button')
console.log(innerBtns)
id属性
console.log(box.id)	//获取id名字
box.id = 'rose'
title属性
console.log(box.title)		//获取title名字
box.title = "刘德华"
style 样式操作 element.style.样式名
box.style.background = 'red'  /
console.log(box.style.background);//获取背景颜色
innerText

获取显示的文本,赋值就是设置对应的文本

console.log(box.innerText)	//获取里面显示的文本(忽略标签,只看文本)
box.innerText = '睡了吗'		//覆盖之前里面的所有内容
box.innerText = '<b>吃了没</b>' //设置文本,是不会解析里面的标签的
innerHTML

获取显示的html内容,赋值就是设置对应的html内容

console.log(box.innerHTML)	//会将里面所有的html代码全部获取
box.innerHTML='<b>吃了没</b>'		他会解析里面的b标签,显示为html设置加粗效果

2.属性节点

操作属性节点:attribute,Attr属性节点对象,设置属性节点

对于input 元素 对应存在name和value属性值

对于img元素存在src属性值

对于a标签 存在href属性

所有元素都自带id,lass,style,title属性值

对于标签本身自带的属性,我们可以通过标签元素,属性名来获取对应的属性值;后天加上去的属性不能获取

<div opo='a' ></div>
通过attributes获取所有的属性
var attrs = box.attributes	//返回的是一个NameNodeMap,里面包含的是多个数据

nameNodeMap里面包含下标,以及length属性,还存在增改(set)删(remove)查(get)的方法

第一种访问

#通过下标进行返回

attrs[0]		//访问第一个属性节点
第二种访问

还可以通过j键(属性名)来进行访问

attrs['opo']		//f访问oppo属性节点

访问里面的属性个数

attrs.length		//返回3
第三种访问

通过item方法,获取的是getNameItem方法

attrs.item(0)	//访问第一个属性,相当于attrs[0]
attrs.getNameItem('opo')//访问名字为opo的属性内容,attrs['opo']==attrs.getNameItem('opo')
第四种 通过attrs.属性名
attrs.opo
通过attributes设置

获取的是一个节点对象attr对象 即属性节点对象,设置的时候也要是属性节点对象

attrs.opo = "opo='123'"	//无法设置
attrs.opo = attrs.id	//只读的 不能进行重新赋值


attrs.removeNameItem('opo')	//删除opo这个属性名对应的属性节点

//attrs表示一个属性节点对象,设置方法需要传递进去一个新的属性节点对象
//创建一个属性节点对象	参数为属性名
var opo = document.createAttribute('opo')
opo.value = 'hello'	//给节点属性值

attrs.setNameItem(opo)
//attrs.opo = opo
属性操作
属性节点操作(对attr属性节点进行操作)

attributes 获取所有的属性节点,返回的是一个NameNodeMap.

可以通过下标以及对应的属性名进行方法.

NameNodeMap里面存在三个方法:getNameItem-获取属性节点,removeNameItem-移除属性节点,setNameItem-属性节点.

属性节点不直接进行赋值,需要修改可以调用setNameItem(), 里面需要传入一个新的属性节点

var opo = document.createAttribute('opo')//创建属性节点
opo.value = 'hello'
属性操作的方法(对元素进行操作,常用)

对于本身天生就有的属性,直接通过元素.属性名来获取

对于本身不是天生就有的

可以通过getAttribute()来获取(只要是里面的属性都可以获取)
var name = box.getAttribute('name')	//参数1为属性名
console.log(name);

var boxClass = box.getAttribute('class')//参数1属性名
console.log(boxClass)
可以setAttribute()方法进行设置

参数1为属性名,参数2为属性值,两个属性都是string

box.setAttribute('username','123') //属性名为username,属性值为123
可以通过removeAttribute()方法删除

参数是你需要删除的属性名 removeAttribute

box.removeAttribute('class')		//删除class属性
属性和属性节点操作方法的区别:

element的三种方法(比较常用):getAttribute(),setAttribute(),removeAttribute();

NameNodeMap(属性节点)里面存在三种方法:getNamedItem(),setNamedItem(),removeNamedItem();

1.属性节点是属于节点对象,属性是属于元素中的一个属性,属性在元素中被获取为节点;

2.节点是一个对象,属性是一个对象里面的属性;

3.属性节点包含属性,参数为属性名;

4.属性节点是对象,元素节点包含属性节点;

5.统一获取的话,可以使用attributes,返回的是一个属性节点集合

3.文本节点

操作文本节点:text,Text元素节点对象 设置文本节点

节点的共有属性

元素节点有,属性节点有,文本节点有

var title = document.getElementByIdTagName('title')[0]
console.log(title.nodeName)	//节点名称
console.log(title.nodeType)	//节点类型 元素节点1,属性节点2,文本节点3
console.log(title.nodeValue)	//节点值 元素节点为null,属性节点为属性值,文本节点为文本值

子节点

var box = document.getElementById('box')
box.childElementCount	//返回节点的子元素个数 
box.childNodes	//返回所有的节点集合,返回类型是一个nodeList,包含所有的子节点
box.children		//返回子元素,返回的是一个htmlCollection,只包含元素节点

DOM元素节点之间的关系

主要划分为:父元素,子元素,兄弟元素(同胞元素)

<div id ="box">
	<span>000</span>
	abc<div id="innerBox">
		123<b>4</b>456
	</div>efg
	<p>2</p>
	<a>3</a>
</div>
//box里面包含div和对应的p和a标签
//innerbox里面包含了b标签

var innerBox = document.getElementById("innerBox")

父节点 parentNode(一个)

console.log(innerBox.parentNode)	//获取父节点
console.log(innerBox.parentElement)//获取父元素,返回element

子节点 children(多个)

console.log(innerBox.children)	//获取所有的子元素节点
console.log(innerBox.children[0])	//获取第一个子节点(常用)

获取子节点(获取的是多个)-元素节点 ,不包含文本节点,返回的是一个htmlCollection

子节点集合

子节点会包含所有的元素节点,属性节点,文本节点。

console.log(innerBox.childNodes)	//不常用

获取第一个子节点firstChild

相当于innerBox.children[0]
又有不一样的点:firstChild这个获取的包含了元素节点,属性节点以及文本节点

console.log(innerBox.firstChild)

获取最后一个子节点(包含文本节点)

console.log(innerBox.lastChild);

兄弟 处在一级的标签元素

上一个兄弟 next;

下一个 兄弟pre.

console.log(innerBox.nextSibling)	//下一个兄弟节点efg
console.log(innerBox.previousSibling)	//上一个兄弟节点abc

//上一个兄弟元素节点
console.log(innerBox.nextElementSibling)	//没有就返回null
//下一个兄弟元素节点
console.log(innerBox.previousElementSibing);// 没有返回null,找到p标签

节点操作的方法

元素节点操作的方法

创建元素节点
document.createAttribute('属性名').value='属性值'	//创建属性节点,必须要给属性节点赋值
var a=document.createAttribute('name')
a.value='rose'
p.setAttributeNode(name)	//设置属性节点(一般不用),建议使用setAttribute

//创建元素节点,需要传递标签名,第一个参数,第二个参数为选项可省略
document.createElement('div')	//创建一个元素div,返回类型的是一个element
div.className = 'hello'	// 创建的div元素指定对应的class属性值
div.innerText = '你吃饭了吗' 	//给创建的div设置文本
添加子节点 appendChild
var body = document.getElementByTagName('body')[0].appendChild(div)	//获取body,给body添加一个子节点
//添加只能添加最后
//要添加到最前面可以使用insertBefore()

document不能直接添加子节点

删除子节点
body.removeChild(div)
替换子节点
var p = document.createElement('p')
p.innerText = '我是p标签'
p.style.background = 'red'
body.replaceChild(p,div)	//将div替换为p

文本节点操作的方法

创建文本节点
var text = document.createTextNode('hello 你好')
p.appendChild(text)	//将文本节点添加到p标签,从后面添加

//insertBefore()添加到某个子节点前面,第一个是你需要添加的节点,第二个是子节点
p.insertBefore(hello,text)
//hello对应的节点添加到text节点之前,里面的两个节点都会存在p节点中
克隆一个节点
var text1 = text.cloneNode()	//c克隆一个新的节点
p.appendChild(text1)

onScroll

表示的是滚动栏滚动事件

//给window添加一个滚动栏滚动事件
window.onScoll = function(){
	//console.log("触发了")
	//获取滚动栏离上面的距离 ,离上面的顶层的距离或者可视区域的距离
	//具备浏览器兼容,前者ie67没问题,后者谷歌兼容
	var scrollTop = documentElement.scrollTop|document.body.scrollTop
	console.log(scrollTop)
	document.querySelector('div').innerText = scrollTop
}

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值