day09 DOM

news/2024/5/4 6:47:25/文章来源:https://www.cnblogs.com/itlulu/p/16830284.html

DOM的概述

DOM是文档对象模型(document object model) , 顾名思义就是用来操作对应的HTML文档的 .

它是一个遵从文档流的语句 , 是同步机制的 .

DOM的分类

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

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

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

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

 

 

 

document ( 文档对象 ) (*)

方法

获取 : 通过对应的表示来获取element元素

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

//通过id获取对应的元素,返回的是一个element对象
var box=document.getElementById('box')
console.log(box)
  • document.getElementByClassName 通过className获取 ( HTMLCollection )
//通过class获取相关元素对象,返回的是一个伪数组(HTMLCollection(具备index和length))
var contents=document.getElementByClassName('content')
console.log(contents) //获取到的是HTMLCollection,为伪数组
console.log(contents[0]) //获取第一个匹配到的元素
  • document.getElementByName 通过input的name属性来获取 ( NodeList )
//通过input表单标签的name属性来获取,返回的是一个伪数组(NodeList)
<input name='sex'></input>
console.log(document.getElementByName('sex'))
  • document.getElementByTagName 通过标签名来获取 ( HTMLCollection )
//通过标签名来获取,返回的是个伪数组 ( HTMLCollection )
var div=document.getElementsByTagName('div')
console.log(div)    //( HTMLCollection )
console.log(div[0])    //获取第一个匹配的元素

 

  • document.querySelector 通过选择器获取第一个 ( element )
//根据选择器获取第一个, (id,class,标签,标签名) 返回的是个 element 
console.log(document.querySelector('p'))    //获取标签名为p的标签
console.log(document.querySelector('.box'))    //获取class选择器的标签
console.log(document.querySelector('#item'))    //获取id选择器的标签
console.log(document.querySeletor('div:nth=child(1)'))    //获取div的第一个子元素
  • document.querySelectorAll 通过选择器获取所有的 ( NodeList )

 

//根据对应的选择器获取所有匹配的元素,是个伪数组 
console.log(document.querySelectorAll('#box'))
console.log(document.querySelectorAll('.content'))
console.log(document.querySelectorAll('div'))
//NodeList和HTMLCollection的区别: 
//都是伪数组
//NodeList是以键值对储存
  • document.getRootNode 获取根节点
//根节点
console.log(document.getRootNode())

创建 : 创建对应的节点对象

  • document.createElement 创建元素节点

//创建一个元素,传递对应的标签名
var div=document.createElement('div')
  • document.createAttribute 创建属性节点
//创建一个id属性,默认值为空字符串
var attr=document.createAttribute('id')
attr.value='hello world!'
console.log(attr)    //id='hello world'
console.log(typeof attr) //object
  • document.createTextNode 创建文本节点

 

//创建文本节点 传递的参数是显示的文本内容
var text=document.createTextNode('hello')
console.log(text)    //'hello'
console.log(typeof text)    //object

属性

获取属于文档的相关内容

  • document.body 获取body

  • document.head 获取head

  • document.froms 获取froms ( 返回的是一个HTMLCollection )

...

Element 元素对象 ( * )

方法

获取 : 在元素里面获取元素 , 跟document获取元素的方法一致

element.getElementById()
element.getElementByClassName()
element.getElementByTagName()
element.getElementByName()
element.querySelector()
element.querySelectorAll()
//获取对应的element元素对象
var box=document.getElementById('box')
//在box里获取对应的元素
var link=box.getElementByClassName('link')[0]
console.log(link)
//链式调用
var b=document.getElementById('box').getElementByClassName('link')[0].getElementByTagName('b')[0]
console.log(b)

添加 : 在元素里添加元素,或者是添加text 添加到对应的元素中去

追加到末尾

  • append (追加多个,支持传入string和node(字符串会被识别为文本))

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

//获取元素
var box=document.getElementById('box')
//创建一个p标签
var p=document.createElement('p')
//创建一个文本节点
var text=document.createTextNode('我是文本')
//append和appendChild都是添加到末尾
//对于已经添加的元素不能重复添加(重复会以最后一次为准,就是换了个位置)
box.append('<p>添加的</p>',p,text) //可添加多个,支持string和node,字符串会被识别为文本
var strong=document.createElement('strong')
box.appendChild(strong)

插入到某个子元素之前

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

var box=document.getElementsByClassName('box')[0]
var link=document.getElementById('link')
var age=document.createElement('age')
//第一个参数为需要插入的节点,第二个参数为被替换的节点
box.insertBefore(age,link)//把link换成age
//插入只针对子元素,孙子元素会报错
var b=document.getElmentsByClassName('box')[0].getElementById('link').getElementByTagName('b')[0]
box.insertBefore(age,b) //b为孙子节点,会报错
  • insertAdjacentElement 插入Element元素

  • insertAdjacentHTML 插入html代码

  • insertAdjacentText 插入文本

// 'beforebegin': 在该元素本身的前面。
// 'afterbegin':只在该元素当中,在该元素第一个子孩子前面。
// 'beforeend':只在该元素当中,在该元素最后一个子孩子后面。
// 'afterend': 在该元素本身的后面。
var box=document.querySeletor('box')
var hello=document.createElement('hello')
box.insertAdjacentElement('beforebegin',hello)
box.insertAdjacentElement('afterbegin',hello)
box.insertAdjacentElement('beforeend',hello)
box.insertAdjacentElement('afterend',hello)
box.insertAdjacentHTML('afterend','<b>我是插入到box后面的html代码</b>')
box.insertAdjacentText('afterend','<a>我是插入到box后面的文本,html代码识别不了</a>')

删除方法

  • remove 删除自身

  • removeChild 删除子元素

//删除自己 里面内容都删除
box.remove()
//删除子元素 传递对应的子元素
box.removeChild(link)

修改方法

  • replaceChild 一对一替换

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

//修改方法
//既可以替换元素 也可以替换文本
var btn = document.createElement('button')
var text = document.createTextNode('我是文字')
//第一个新的节点 第二个对应的子节点
box.replaceChild(btn,link)
//替换里面所有的 变成你传入的
box.replaceChildren('你好',text,btn)

克隆的方法

  • cloneNode

<div><a href="hello">你好</a>
</div>
<script>var box = document.querySelector('div')//克隆对应的元素 传递的参数是一个布尔类型的值 为true表示深度克隆 为false表示浅克隆
falsevar 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)

//获取属性 通过属性名来获取属性值 后面带NS 表示namespace 命令空间
//传递的是属性名
var attrVal = box.getAttribute('hello')
console.log(attrVal);//hi
//设置属性
//第一个参数属性名 第二个参数为属性值(自动发生隐式转换)
box.setAttribute('age',18)//添加
box.setAttribute('age','20')//修改
//移除属性 根据属性名来移除对应的属性 对于本身带的和后续添加的都可以进行操作
box.removeAttribute('hello')
box.removeAttribute('age')

属性

基础属性

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

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

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

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

  • tagName 属性 (只读属性)

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

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

<div id="hello" class="你好" title="点我"><b>你好世界</b></div>
<script>var div = document.querySelector('div')//元素对象的相关属性 不赋值就是获取 赋值就是设置
    console.log(div.id); //获取对应的id属性值
    div.id = 'hi'console.log(div.className); //获取对应的class名字
    div.className = '李丹'console.log(div.style); //获取一个样式对象 里面相关属性就是对应的css的样式名
    console.log(div.style.backgroundColor); //获取对应的背景颜色的值
    div.style.backgroundColor = 'red' //设置当前的背景颜色为红色
    console.log(div.title); //获取对应的title属性值
    div.title = '你好'console.log(div.innerHTML); //获取里面显示的html代码 (可以识别html代码)
    div.innerHTML = '<a>改变的内容</a>'console.log(div.innerText); //获取对应显示的文本 (全部当作文本)
    div.innerText = '<a>改变的内容</a>'//不能进行赋值操作
    console.log(div.tagName); //获取对应的标签名 大写的标签名(全大小) (只读)
</script>

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

  • previousElementSibling 前面的元素

  • nextElementSibling 后面的元素

  • parentElement 父元素

  • children 子元素集合 (HTMLCollection)

//前面的元素
console.log(div.previousElementSibling);
//后面的元素
console.log(div.nextElementSibling);
//获取父元素 parentElement 子元素 children
console.log(div.parentElement);//获取到是一个元素
console.log(div.children);//获取到的是一个元素数组 伪数组 HTMLCollection

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

  • attributes

//获取元素内所有的属性节点的属性 返回的是一个伪数组 nameNodeMap (伪数组 map他是存储键值对)
var attrs = div.attributes
console.log(attrs);
console.log(attrs[0]); //获取第一个属性对象
console.log(attrs[0].value); //获取第一个属性对象的属性值
console.log(attrs.id); //获取属性名为id的属性对象
console.log(attrs.id.value); //获取属性名为id的属性值
// nameNodeMap对象拥有的方法
//getNamedNodeItem 传入属性名获取对应的属性对象
console.log(attrs.getNamedItem('class'));
//setNamedNodeItem attr表示attribute对象
var attr = document.createAttribute('class')
attr.value = '渣渣辉'
attrs.setNamedItem(attr)
//removeNamedNodeItem
attrs.removeNamedItem('class')
//item方法获取的方法 通过下标获取
console.log(attrs.item(0));

Node

DOM中的节点分类

  • 元素节点 element

  • 属性节点 attributeNode

  • 文本节点 textNode

节点相关的属性

节点划分的属性 (*

  • nodeName 节点名

  • nodeType 节点类型

  • nodeValue 节点值

var att = document.createAttribute('class')
att.value = 'box'
var ele = document.createElement('h1')
ele.innerText = 'hello'
var txt = document.createTextNode('文本节点')
//nodeName
console.log(att.nodeName); //属性对应的是属性名
console.log(ele.nodeName); //元素对应的是标签名
console.log(txt.nodeName); //文本对应的是#text
//nodeType (以数值进行划分的 1 2 3 )
console.log(att.nodeType); // 2
console.log(ele.nodeType); // 1
console.log(txt.nodeType); // 3
//nodeValue
console.log(att.nodeValue); // 属性得到是对应的属性值
console.log(ele.nodeValue); // 元素节点得到是null
console.log(txt.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); //得到父节点//获取子节点
    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>

节点相关的方法 (*

  • replaceChild 替换子节点

  • appendChild 添加子节点

  • removeChild 删除子节点

  • insertBefore 插入节点到子节点前面

  • cloneNode 克隆节点

  • replaceChildren 替换所有子节点

  • append 添加多个子节点

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

操作属性节点的方法

  • setAttributeNode (属性节点 Attribute对象)

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

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

<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>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_218762.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阻止 mousemove 或 touchmove 与 click 事件同时触发

最近做了自己的开源项目 Msw-Tools&#xff0c;参考了 VConsole 工具中按钮的拖拽功能&#xff0c;计划给 MSW 按钮也增加类似的拖拽效果&#xff0c;并兼容PC端和手机端&#xff0c;但是遇到一个问题&#xff1a;一个按钮绑定了多个事件&#xff0c;怎样才能阻止 mousemove 或…

Python还能这样玩?让你轻松实现配色自由

嗨嗨&#xff0c;你们好 好几天没更新了&#xff0c;最近有点点无聊&#xff0c;就琢磨出一个一个有趣的东西 教你们用python快速获取图片配色&#xff0c;做个可视化配色方案出来 这期分享一个Python快速提取任何图片配色方案的工具&#xff1a;Haishoku Haishoku是一个用来…

概论相关分布知识--回顾笔记

伯努利分布&#xff1a;如果变量X服从伯努利分布 Ber(p) &#xff0c;那么 X只有两种取值&#xff0c;记为{0,1}&#xff0c;有&#xff1a;二项分布&#xff1a;如果变量X服从二项分布B(n,p) &#xff0c;那么X有 n 1 种取值&#xff0c;有&#xff1a;categorical 分布&…

Android靶场All Safe 靶场WP

环境准备 ADB DDMS ALLsafe app part 1 不安全的日志记录 挑战 在不反编译的情况下从日志中获取输入的密钥。 方法一 使用DDMS监控日志记录&#xff0c;工具在SDK/tools目录下的monitor.bat&#xff0c;需要java8的环境支持&#xff0c;java11会报错。 使用adb连接 测试机…

工业控制系统安全评估流程物理环境脆弱性

架构与设计脆弱性 表 4.2 架构与设计脆弱性检查表 脆弱性 描述 安全架构是企业架构的一部分&#xff0c;在工业控制系统 架构设计之初&#xff0c;应该融合考虑。 在架构搭建与设计过程中未考虑安全因素 在架构设计时需要解决用户识别与授权、访问控制机 制实现、网络拓扑绘制…

厨电智能化趋势下,究竟什么才是真正的“用户思维”?

文|智能相对论 作者|佘凯文 近期2022年前三季度的各项经济数据在陆续发布&#xff0c;大环境依然承压&#xff0c;各个行业都在负重前行。 厨电行业在房地产下滑、疫情反复等因素影响下&#xff0c;前三季度同样一直承受着不小的压力&#xff0c;AVC数据显示&#xff0c;202…

进程的创建终止、阻塞唤醒、挂起激活(操作系统)

目录 一、引起创建进程的事件 二、进程的创建 三、进制的终止 1&#xff0e;引起进程终止的事件 2&#xff0e;进程的终止过程 四、进程的阻塞和唤醒 1&#xff0e;引起进程阻塞和唤醒的事件 2&#xff0e;进程阻塞过程 3&#xff0e;进程唤醒过程 五、进程的挂起和激活 1&…

安装Mysql-zip安装

一、安装 1、下载 到mysql官网 http://dev.mysql.com/downloads/mysql/ 下载mysql 注:msi的是安装版 2、解压 解压到想安装的目录下,我的是D:mysql-5.7.13-winx64 3、配置my.ini 在D:mysql-5.7.13-winx64目录下新建my.ini文件,输入以下配置代码: [mysqld] port = 3306 base…

springboot嘉应房地产公司质量管理系统毕业设计源码453100

目 录 摘要 1 1 绪论 1 1.1研究背景及意义 1 1.2国内外研究现状及发展趋势 1 1.3系统开发技术的特色 1 1.4论文结构与章节安排 1 2 嘉应房地产公司质量管理系统 系统分析 3 2.1 可行性分析 3 2.2 系统流程分析 3 2.2.1数据增加流程 3 2.3.2数据修改流程 4 2.3.3数据删除流程 4…

Python提取pdf中的表格数据(附实战案例)

14天阅读挑战赛 今天给大家介绍一个Python使用工具&#xff0c;那就是从pdf文件中读取表格数据&#xff0c;主要用到第三方库 pdfplumber。 pdfplumber简介 pdfplumber是一款基于pdfminer&#xff0c;完全由python开发的pdf文档解析库&#xff0c;不仅可以获取每个字符、矩形…

[spark]transformation算子

1.sample算子 1&#xff09;说明 sample算子&#xff1a;对rdd中的数据进行抽样。一个非常重要的作用就是开看rdd中数据的分布&#xff0c;进行各种调优与优化。 数据倾斜&#xff1a;数据分布的不均匀&#xff0c;shuffle会将相同key的数据汇总到一台机器上&#xff0c;就会…

水库水雨情监测系统 水雨情自动测控平台 水库雨水情监测及视频监控解决方案_设备_水位_远程

平升电子水库水雨情监测系统 水雨情自动测控平台 水库雨水情监测及视频监控解决方案_设备_水位_远程辅助水利管理部门实现水库雨水情信息“全要素、全量程、全覆盖”自动测报。系统具备水库水位、雨量、现场图像/视频等水文信息采集、传输、处理及预警广播等功能&#xff0c;有…

12-敏感的资料怎么存在K8S-Secret

12-敏感的资料怎么存在K8S-Secret 前言 今天的学习笔记将介绍Kubernetes另一个组件secret。secret协助开发者将一些敏感信息&#xff0c;像是数据库账密、访问其它server的access token、ssh key&#xff0c;用非明文的方式&#xff08;opaque&#xff09;存放在Kubernetes中…

【数据结构与算法分析】0基础带你学数据结构与算法分析06--树(TREE)

目录 前言 树的属性 树的实现 树的遍历与应用 深度有限遍历 (DFS) 广度优先遍历 (BFS) Not all roots are buried down in the ground, some are at the top of a tree. — Jinvirle 前言 Tree 是一些结点的集合&#xff0c;这个集合可以是空集&#xff1b;若不是空集…

中国锚杆行业竞争格局及投资风险分析报告

锚杆的概念 锚杆(又称土锚杆、土钉)是在天然土层侧壁钻孔&#xff0c;放置拉杆&#xff0c;注浆锚固而成。根据所用材料&#xff0c;拉杆可分为粗钢筋、高强度钢丝束、钢绞线等。通过计算确定了侧墙上锚杆的截面积、层数、间距和长度。钻孔直径应由设计确定。常用的孔道灌浆有水…

【QT + OsgEarth】(四)加载国界线矢量图

效果图 实现过程 获取国界线矢量图在.earth文件中加载矢量图文件在Qt程序中获取图层节点并控制参数 加载矢量图文件 < image > 标签定义要栅格化的shp文件 driver&#xff1a;使用agglite&#xff0c;将矢量文件栅格成为栅格文件< features > 子标签读取shp文件…

亿可控_第3章 指标数据持久化与设备详情展示

亿可控_第3章 指标数据持久化与设备详情展示 文章目录亿可控_第3章 指标数据持久化与设备详情展示第3章 指标数据持久化与设备详情展示学习目标1. InfluxDB入门及介绍1.1 InfluxDB简介1.2 InfluxDB相关概念1.3 InfluxDB的基本操作1.3.1 InfluxDB数据库操作1.3.2 InfluxDB数据表…

SANGFOR深信服短信插件

设置说明 第一步&#xff1a;先配置短信通知服务器&#xff08;以下以HTTP为例&#xff09;。 步骤1、设置短信通知服务器&#xff0c;在[系统管理/系统配置/高级配置/通知设置]&#xff0c;点击<新增短信通知服务器>&#xff0c;勾选启用&#xff0c;可启用短信通知服…

mdio bcm5482访问

查看硬件原理图&#xff0c;5482通过mdio访问自己的寄存器&#xff0c;M4通过cpld对5482进行初始化操作(复位/解复位&#xff09; 可以看到bcm5482的MDC和MDIO用的是port P 的pin4和pin5,所以基地址为GPIO_PORTP_BASE. 对应的分别是引脚4和引脚5&#xff0c;所以由此可以封装出…

SHEIN算法工程师面试题7道|含解析

8本电子书免费送给大家&#xff0c;见文末。 1、数据处理的常用方法有哪些&#xff1f; 对于离群点 当作缺失值进行处理删掉离群点所在的样本实用统计值进行填充 对于缺失值 可以用均值或均位数进行填充可以用特定值&#xff0c;如-1可以用np.nan表示 对于类别特征 编码方…