Dom

Dom的概述

Dom文档对象模型,顾名思义他就是用于操作对应的文档化的,也就是操作你写的html文档.Dom是一个遵从文档流的语句.所以他是同步机制

Dom的分类

domcument dom操作中最大的对象(表示当前操作的html文档)

element 元素对象 (表示的是对应的标签元素)

attribute属性对象(表示的所有的html标签里面的属性)

text文本对象(表示在html代码里面写的所有文本)


document(文档对象)


获取通过对应的方法来获取element元素

document.getElementById 通过id获取对应的元素(element)

document.getElementsByClassName 通过className获取 (HTMLCollection)

document.getElementsByTagName 通过标签名获取(HTMLCollection)

document.getElementsByName 通过name属性获取 (NodeList)

document.querySelector 通过选择器获取第一个 (Element)

document.querySelectorAll 通过选择器获取所有(NodeList)

document.getRootNode 获取根节点(Node)

创建的相关方法 创建对应的节点对象

 document.createElement创建元素节点

document.createAttribute 创建属性节点

document.createTextNode 创建文本节点

属性

获取属于文档的相关内容

document.body 获取body

document.head 获取head

document.froms 获取froms(返回一个htmlCollection)

Element 元素对象

方法

获取的方法(在元素里面获取元素)(跟对应的document的获取元素方法一致)

添加的方法(在元素里面的添加元素或者添加text 添加到对应的元素中)

添加到末尾的方法

append (追加多个支持里面传入字符串(字符串会被识别成文本))

appendChild(追加一个 支持node对象)

插入到某个子元素之前

insertBefore 插入元素到某个子元素之前 参数1需要传入的元素、参数2子元素)

insertAdjacentElement 插入element

insertAdjacentHTML 插入HTML代码

insertAdjacentText 插入文本

//获取元素

var box = document.getElementById('box')

//第一个是对应需要插入的节点 第二个是对应的子节点

var link = box.getElementsByClassName('link')[0]

var strong1 = document.createElement('strong')

box.insertBefore(strong1,link)

//插入只针对第一层的子元素

var b = document.getElementById('box').getElementsByClassName('link')

[0].getElementsByTagName('b')[0]

box.insertBefore(strong1,b) //错误的 他是孙子节点

// 'beforebegin': 在该元素本身的前面。

// 'afterbegin':只在该元素当中,在该元素第一个子孩子前面。

// 'beforeend':只在该元素当中,在该元素最后一个子孩子后面。

// 'afterend': 在该元素本身的后面。

var hello = document.createElement('hello')

box.insertAdjacentElement('beforebegin',hello)

box.insertAdjacentElement('afterbegin',hello)

box.insertAdjacentElement('beforeend',hello)

box.insertAdjacentElement('afterend',hello)

box.insertAdjacentHTML('beforebegin','<b>我是插入的之前的html代码</b>')

box.insertAdjacentText('beforebegin','文本')

删除方法

remove 删除自身

removeChild 删除子元素

//删除自己里面内容都删除

box.remove()

//删除子元素 传递对应的子元素 

修改方法

replaceChild 一对一替换

replaceChildren 替换所有(可以传递多个参数 支持字符串)

克隆的方法

cloneNode

<div>

<a href="hello">你好</a>

</div>

<script>

var box = document.querySelector('div')

//克隆对应的元素 传递的参数是一个布尔类型的值 为true表示深度克隆 为false表示浅克隆

(false)

var element = box.cloneNode()//只克隆对应的第一次 默认为false

console.log(element);//<div></div>

var element = box.cloneNode(true)//只克隆所有的内容包含对应的里面文本和元素及相关事

console.log(element);//完整克隆

</script>

属性操作的相关方法 (对于所有的属性都可以进行操作)

获取 getAttribute(attrName)

设置 setAttribute(attrName,attrValue)

删除 removeAttribute(attrName)

属性

基础属性

id 属性 (获取/设置 id值)

className 属性 (获取/设置 class值)

style 属性 (获取对应的一个样式对象 / 设置相关样式)

title 属性 (获取/设置 title属性)

tagName 属性 (只读属性)

innerHTML 属性 (显示的html内容 编译对应的html代码)

innerText 属性 (显示的文本 不能编译html代码)

节点相关属性(只读属性)

previousElementSibling 前面的元素

nextElementSibling 后面的元素

parentElement 父元素

children 子元素集合 (HTMLCollection)

相关获取元素内属性节点集合的属性(只读属性)

attributes

Node

DOM中的节点分类

元素节点 element

属性节点 attributeNode

文本节点 textNode

节点相关的属性

节点划分的属性 (*)

nodeName 节点名

nodeType 节点类型

nodeValue 节点值


节点关系的属性 (*)

父子

parentElement 父元素

parentNode 父节点

childNodes 所有的子节点(包含元素节点和文本节点)

children 所有的元素节点

兄弟关系

previousElementSibling 上一个元素节点

previousSibling 上一个节点

nextElementSibling 下一个元素节点

nextSibling 下一个节点

第一个子节点和最后一个子节点

firstChild 第一个子节点

firstElementChild 第一个子元素节点

lastChild 最后一个子节点

lastElementChild 最后一个子元素节点

<div>

hello

<a href="">你好</a>

<p>

<a href="">前面的元素节点</a>

你好

<a href="">后面的元素节点</a>

</p>

你好

</div>

<script>

//节点的相关关系

var p = document.querySelector('p')

//父子关系

//获取对应的父节点 (一般情况俩者是一样的)

console.log(p.parentElement); //得到父元素

console.log(p.parentNode); //得到父节点

节点相关的方法 (*)

replaceChild 替换子节点

appendChild 添加子节点

removeChild 删除子节点

insertBefore 插入节点到子节点前面

cloneNode 克隆节点

replaceChildren 替换所有子节点

append 添加多个子节点

remove 移除自己及所有的子节点

操作属性节点的方法

setAttributeNode (属性节点 Attribute对象)

getAttributeNode (返回的是一个属性节点 Attribute)

removeAttributeNode (根据对应的属性节点删除)

删除空文本节点的相关方法

//获取子节点

console.log(p.parentNode.childNodes); //获取子节点 (包含元素 包含文本) nodeList

俩个文本 加上一个p标签

console.log(p.parentNode.children); //获取子元素 (只包含元素节点)HTMLCollection

p标签

//兄弟关系

//上一个

console.log(p.previousElementSibling); //上一个元素节点

console.log(p.previousSibling); //上一个节点 (空文本也算节点)

// 下一个

console.log(p.nextElementSibling); //下一个元素节点

console.log(p.nextSibling); //下一个节点

//第一个子节点

console.log(p.firstChild); //空文本

console.log(p.firstElementChild);//a标签

//最后一个子节点

console.log(p.lastChild); //空文本

console.log(p.lastElementChild); //a标签

</script>

<div id="box"></div>

<script>

//运用相对较少

var box = document.getElementById('box')

//获取属性节点 返回时一个attribute对象

//传入一个string类型的属性名

console.log( box.getAttributeNode('id'));

console.log( box.getAttributeNode('id').value);

//设置对应的属性节点 传入的是一个attribute对象

var attr = document.createAttribute('class')

attr.value = 'content'

box.setAttributeNode(attr)

//removeAttributeNode 根据属性节点对象来删除删除对应的属性节点

box.removeAttributeNode(box.attributes[0]) //删除第一个属性节点

</script>

<div>

<a href="">嘻嘻</a>

<b>哈哈</b>

hello

</div>

<script>

var div = document.querySelector('div')

//获取div的所有子节点

console.log(div.childNodes.length);//5

//传入一个元素 删除里面的空文本节点

function deleteEmptyTextNode(element){

//获取所有的子节点

var nodes = element.childNodes

//遍历所有的子节点

for(var node of nodes){

//进行判断 判断当前是否为空文本节点

if(node.nodeType == 3 && /^\s+$/.test(node.nodeValue)){

//删除对应的空文本节点

element.removeChild(node)

}

}

}

deleteEmptyTextNode(div)

console.log(div.childNodes.length);//3

</script>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容