DOM文档对象模型

10.DOM文档对象模型

1.DOM节点的组成

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

标签就是元素节点

class id的值 等 就是属性节点

文字,空格,换行就是文本节点

 <div class="box">你好</div><元素节点 属性节点>文本不节点</元素节点>

2如何获取页面元素

  1. 根据id获取getElementById

    <div id="time">2023-08-01</div><script>// 1.因为我们从文档页面从上往下加载,所以得先有标签,所以我们script写到标签下面// 2.get 获得element 元素 by 通过 // 3.参数id是大小写敏感的字符串// 4.返回的是一个元素对象var timer = document.getElementById('time');console.log(timer);console.log(typeof timer);// 5.   console.dir(timer)打印我们返回的元素对象 更好的查看里面的属性和方法console.dir(timer)</script>
    
  2. 根据标签名获取

    使用getElementByTagName()方法返回带有指定标签名的对象的集合

    注意:

    1. 因为得到的是一个对象的集合,所以我们想要操作里面的元素就需要遍历
    2. 得到元素对象是动态的
     <ul><li>2</li><li>2</li><li>2</li><li>2</li><li>2</li></ul><script>// 1.返回的是 获取过来元素对象的集合 以伪数组的形式存储的(只有length 下标这边属性 其他的push那些是没有的)var lis = document.getElementsByTagName('li');console.log(lis);console.log(lis[0]);// 2.我们想要依次打印里面的元素对象我们可以采取遍历的方式for (let i = 0; i < lis.length; i++) {console.log(lis[i]);// 3.如果页面中只有一个li,返回的还是这个伪数组的形式// 4.如果页面中没有这个元素,返回的是空的伪数组形式}</script>
    
  3. 通过HTML5新增的方法获取

    1. document.getElementByClassName(‘类名’);//根据类名返回元素对象的集合

      // 通过document.getElementsByClassName根据类名获取某些元素的集合var boxs = document.getElementsByClassName('box');console.log(boxs); //HTMLCollection(2) [div.box, div.box]
      
    2. document.querySelector(‘选择器’)//返回指定选择器第一元素对象,切记里面的选择器是需要加符号的 .box #nav 等

       // querySelector返回指定选择器的第一个元素对象var firstBox = document.querySelector('.box');console.log(firstBox);var nav = document.querySelector('#nav');console.log(nav); //div#nav
      
    3. document.querySelectorAll(‘选择器’)//根据指定选择器返回

       // querySelectorAll ()返回指定选择器所有元素对象的集合var allBox = document.querySelectorAll('.box');console.log(allBox);var lis = document.querySelectorAll('li');console.log(lis);
      
           var oList = document.querySelectorAll(".cls")//NodeListoList.forEach(function (item) {item.style.backgroundColor = "yellow"})
      

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

      var myName = document.getElementsByName("myName");for (var i = 0; i < myName.length; i++) {myName[i].style.backgroundColor = "yellow"}
      
  4. 特殊元素获取

    1. 获取body元素

      document.body //返回body元素对象

    2. 获取html对象

      document.documentElement //返回html元素对象

3节点的分类

  1. 元素节点(1):box.nodeType
  2. 属性节点(2)box.attributes[0].nodeType
  3. 文本节点(3)box.childNodes[0].nodeType
  4. 注释节点(8)box.childNodes

nodeType:检查节点类型

nodeName:获取节点名称,获取到是大写的,比如DIV,SPAN…

nodeValue:获取节点的值

 var box = document.querySelector(".box")console.log(box.comment);console.dir(box)//打印一个对象// 元素节点console.log(box.nodeType);//1//元素节点的名称console.log(box.nodeName);//DIV// 元素节点的值console.log(box.nodeValue);//null// 属性节点 console.log(box.attributes[0].nodeType);//2// 属性名称console.log(box.attributes[0].nodeName);//class// 属性的值console.log(box.attributes[0].nodeValue);//boxconsole.log(box.attributes[1].nodeName);//idconsole.log(box.attributes[1].nodeValue);//idconsole.log(box.attributes[2].nodeName);//styleconsole.log(box.attributes[2].nodeValue);//style// 文本节点console.log(box.childNodes[0].nodeType);//3// 文本节点名称console.log(box.childNodes[0].nodeName);//#text// 文本节点的值console.log(box.childNodes[0].nodeValue);//我是盒子// 注释节点console.log(box.childNodes);console.log(box.childNodes[1].nodeType);console.log(box.childNodes[1].nodeName);console.log(box.childNodes[1].nodeValue);

4属性的操作

  1. 查看属性 attribute获取当前dom的所有属性
  2. 获取属性 getAttribute(“属性的名称”) 返回属性的值
  3. 设置属性setAttribute(“属性名称”,“属性的值”)
  4. 移出属性removeAttribute(“要移除的属性”)
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>/* img {width: 200px;height: 200px;} */</style>
</head><body><button>查看属性</button><button>获取属性</button><button>设置属性</button><button>移除属性</button><img src="./1.jpg" alt=""><script>// 1.获取所有的按钮var btn = document.querySelectorAll("button");var img = document.querySelector("img")// 2.查看属性 attributes 获取当前dom的所有的属性btn[0].onclick = function () {console.log(img.attributes);// for(var i=0;i<img.attributes.length;i++){//     console.log(img.attributes[i]);// }for (var key in img.attributes) {if (img.attributes[key].nodeType == 2) {console.log(img.attributes[key]);}}}// 获取属性 getAttribute("属性的名称") 返回属性的值btn[1].onclick = function () {console.log(img.getAttribute("src"));}// 设置属性 setAttribute("属性名称","属性的值")btn[2].onclick = function () {img.setAttribute("src", "./web1.png")}// 移除属性btn[3].onclick = function () {img.removeAttribute("src")}</script>
</body></html>

5状态属性

checked selected disabled …,不能用setAttribute ,getAttribute ,removeAttribute等操作

6节点的创建

步骤:1.创建节点 2.添加到指点的地方

1.创建节点

createElement(“元素名称”) 创建元素节点

createTextNode(“文本内容”)创建文本内容节点

div.appendChild(txt)追加txt子节点到div上面

className 添加类名称

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.box {background-color: pink;text-align: center;line-height: 200px;}</style>
</head><body><button>创建节点</button><script>/* createElement("元素名称") 创建元素节点createTextNode("文本内 容") 创建文本节点appendChild(txt) 追加子节点className 添加类名称*/// 1.获取domvar btn = document.querySelector("button");btn.onclick = function () {// 2.创建节点var div = document.createElement("div");//3.添加行内样式1div.style.height = "200px";div.style.width = "200px";div.style.borderRadius = "50%";// 4.添加类样式2div.className = "box";//不需要带点(.).box就是box// 5.设置文字var txt = document.createTextNode("我是动态创建的文字");// 6.把文字追加到div里面div.appendChild(txt);// 7.把div添加到页面上document.body.appendChild(div);}</script>
</body></html>

7节点的关系

有父子关系,兄弟关系

父子节点children,parentNode

  • parentNode 获取节点 亲爹

  • firstChild 为IE而生,但是他在Google也是可以使用,但是返回的有可能是文本节点

  • firstElementChild 为Google诞生,在IE会是null 重点

  • lastChild

  • lastElementChild

  • childNode 文本节点+元素节点 w3c

  • children 元素节点 微软的ie 推荐使用

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><div class="box"><li>我是第1li</li><li>我是第2li</li><li id="li3">我是第3li</li><li>我是第4li</li><li>我是第5li</li></div><script>// 节点关系 父 子 兄弟// parentNode 获取节点 亲爹// firstChild 为IE而生,但是他在Google也是可以使用,但是返回的有可能是文本节点// firstElementChild 为Google诞生,在IE会是null 重点// lastChild// lastElementChild// childNode 文本节点+元素节点 w3c// children 元素节点 微软的ie 推荐使用var li3 = document.querySelector("#li3");// 给父节点添加背景色位pinkli3.parentNode.style.backgroundColor = "pink";var box = document.querySelector(".box")// // 1.前面的儿子console.log(box.firstChild);//#textconsole.log(box.firstElementChild);//在IE下,firstElementChild返回的是null// 兼容写法var oChild = box.firstElementChild || box.firstChildoChild.style.backgroundColor = "red"// 2.后面的儿子var oLast = box.lastElementChild || box.lastChildoLast.style.backgroundColor = "yellow"// 所有的儿子们var oList = []var oChilds = box.childNodes;//w3c规范for (var i = 0; i < oChilds.length; i++) {if (oChilds[i].nodeType == 1) {oList.push(oChilds[i])}}//  隔行变色oList.forEach(function (item, index) {item.style.backgroundColor = index % 2 == 0 ? "red" : "green"})// 5.children 微软 ie推荐 会在ie下,把注释当从元素节点console.log(box.children);for (var i = 0; i < box.children.length; i++) {if (i % 2 == 0) {box.children[i].style.backgroundColor = "yellow"} else {box.children[i].style.backgroundColor = "pink"}}</script>
</body></html>

兄弟节点

previousElementSibling前一个兄弟

nextElementSibling后埔一个兄弟

<ul><li>我是第1</li><li>我是第2</li><li id="li3">我是第3</li><li>我是第4</li><li>我是第5</li></ul><script>// 前面一个previousElementSiblingvar li3 = document.querySelector("#li3");var pre = li3.previousElementSibling || li3.previousSiblingpre.style.backgroundColor = "pink"// 后面一个var next = li3.nextElementSibling || li3.nextSiblingnext.style.backgroundColor = "skyblue"</script>

8节点的插入,替换,删除,克隆

1.插入

​ 父.insertBefore(新的节点,参照位置)

​ insertBefore()如果第二个参数为null,就等价于appendChild(),成为父元素里面最后位置元素

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><button>插前</button><button>插后</button><button>插到最后</button><ul><li>我是第1li</li><li>我是第2li</li><li id="li3">我是第3li</li><li>我是第4li</li><li>我是第5li</li></ul><script>var btn = document.querySelectorAll("button");var li3 = document.querySelector("#li3")// 父.insertBefore(新的节点,参照位置)// insertBefore()如果第二个参数为null,就等价于appendChild(),成为父元素里面最后位置元素//    插入到前面btn[0].onclick = function () {// 1.创建div元素var div = document.createElement("div");// 2.设置样式div.style.backgroundColor = "pink";// 3.设置元素的文本div.innerText = "我是动态创建的div"// 4.把div插入到li3的前面li3.parentNode.insertBefore(div, li3)}// 插入到后面btn[1].onclick = function () {// 1.创建元素var div = document.createElement("div");// 2.添加样式div.style.backgroundColor = "skyblue";// 3.添加文本div.innerHTML = "我是在后面插入的动态元素"// 4.把div插入到li3的后面var li4 = li3.nextElementSibling || li3.nextSibling;li4.parentNode.insertBefore(div, li4)}// 插入到最后btn[2].onclick=function(){// 1.创建divvar div=document.createElement("div");// 2.设置文本div.innerHTML="我在最后插入"// 设置背景div.style.backgroundColor="red"// li3.parentNode.insertBefore(div,null)li3.parentNode.appendChild(div)}</script>
</body></html>

2.替换,删除

父.replaceChild(新创建的元素,要替换掉的原来的元素)

父.replaceChild(要删除的元素)

  <button>替换</button><button>删除</button><button>自杀</button><ul><li>我是第1</li><li>我是第2</li><li id="li3">我是第3</li><li>我是第4</li><li>我是第5</li></ul><script>var li3 = document.querySelector("#li3")var btn = document.querySelectorAll("button")// 一.替换// 父.replaceChild(新创建的元素,要替换掉的原来的元素)btn[0].onclick = function () {// 1.创建元素var div = document.createElement("div")// 2.创建文本元素var txt = document.createTextNode("我是替换元素")// 关联创建的元素和文本div.appendChild(txt)// 3.设置元素的颜色div.style.backgroundColor = "red";li3.parentNode.replaceChild(div, li3)}// 二.删除// 父.replaceChild(要删除的元素)btn[1].onclick = function () {li3.parentNode.replaceChild(li3)}// 自杀删除btn[2].onclick = function () {li3.remove()}

3.克隆

浅克隆 colonNode(false),只克隆自己,不能克隆子元素

深克隆 colonNode(true) 会自动克隆自己,还会克隆子元素,但是不会克隆事件

 <button>浅克隆</button><button>深克隆</button><div class="box">我是文字<div class="inner"></div></div><script>var btn=document.querySelectorAll("button")var box=document.querySelector(".box")// 浅克隆 colonNode(false),只克隆自己,不能克隆子元素btn[0].onclick=function(){var oColon=box.cloneNode(false);//在内存中// 把克隆的dom.添加到页面document.body.appendChild(oColon)}// 深克隆 colonNode(true) 会自动克隆自己,还会克隆子元素,但是不会克隆事件btn[1].onclick=function(){var oColon=box.cloneNode(true);//在内存中// 把克隆的dom.添加到页面document.body.appendChild(oColon)}</script>

9innerHtml,innerText,nodeValue;

innerHtml,innerText可以设置,也可以获取

​ 设置 innerText内容原封不动的显示

​ innerHTML如果遇到标签会被渲染

​ nodeValue通过childNodes获取到文本节点才能使用

10.类样式操作

添加add(),移出remove().切换toggle(),替换replace()

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.box {width: 100px;height: 100px;}.box.aaa {background-color: skyblue;width: 100px;height: 100px;}/* 注意这里不能有空格,否则不生效 */.box.bbb {border-radius: 50%;width: 100px;background-color: skyblue;height: 100px;}</style>
</head><body><button>添加</button><button>移出</button><button>切换</button><button>替换</button><div class="box">我是盒子</div><script>var btn = document.querySelectorAll("button");var box = document.querySelector(".box")// 1.添加类名btn[0].onclick = function () {box.classList.add("aaa")}// 2.移除类名btn[1].onclick = function () {box.classList.remove("aaa")}// 3.切换类名称btn[2].onclick = function () {box.classList.toggle("aaa")}// 4.替换类名称btn[3].onclick = function () {box.classList.replace("aaa", "bbb")}</script>
</body></html>

11.设置下标

 <button>我是按钮1</button><button>我是按钮2</button><button>我是按钮3</button><button>我是按钮4</button><button>我是按钮5</button><button>我是按钮6</button><button>我是按钮7</button><button>我是按钮8</button><button>我是按钮9</button><button>我是按钮10</button><script>var btn = document.querySelectorAll("button");// 循环是 同步代码// 延时器 定时器 事件都是异步console.dir(btn)for (var i = 0; i < btn.length; i++) {// 在遍历的过程中,给每个dom对象设置一个属性,值 是下标//    同步btn[i].index = i//设置值在前面// 异步btn[i].onclick = function () {console.dir(this)//点到那个按钮,this就是谁console.log(this.index);//获取值在后面}}</script>

案例排他思想

    <button>我是按钮1</button><button>我是按钮2</button><button>我是按钮3</button><button>我是按钮4</button><button>我是按钮5</button><script>// 排他思想var btn = document.querySelectorAll("button")for (var i = 0; i < btn.length; i++) {btn[i].index = i//设置值btn[i].onclick = function () {// 鼠标点击了谁 ,this就指向谁// 点击后,把所有的按钮背景颜色设置为红色for (var j = 0; j < btn.length; j++) {btn[j].style.backgroundColor = ""//清空颜色}// 再给当前的按钮,设置红色this.style.backgroundColor = "red"alert(this.index)//取值}}</script>

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

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

相关文章

Apache HTTPD 漏洞复现

文章目录 Apache HTTPD 漏洞复现1. Apache HTTPD 多后缀解析漏洞1.1 漏洞描述1.2 漏洞复现1.3 漏洞利用1.4 获取GetShell1.5 漏洞防御 2. Apache HTTPD 换行解析漏洞-CVE-2017-157152.1 漏洞描述2.2 漏洞复现2.3 漏洞利用2.4 修复建议 3. Apache HTTP Server_2.4.49 路径遍历和…

无涯教程-JavaScript - ISREF函数

描述 如果指定的值是参考,则ISREF函数返回逻辑值TRUE。否则返回FALSE。 语法 ISREF (value) 争论 Argument描述Required/OptionalvalueA reference to a cell.Required Notes 您可以在执行任何操作之前使用此功能测试单元格的内容。 适用性 Excel 2007,Excel 2010,Exce…

LCP 50. 宝石补给

每位勇者初始都拥有一些能量宝石&#xff0c; gem[i] 表示第 i 位勇者的宝石数量。现在这些勇者们进行了一系列的赠送&#xff0c;operations[j] [x, y] 表示在第 j 次的赠送中 第 x 位勇者将自己一半的宝石&#xff08;需向下取整&#xff09;赠送给第 y 位勇者。 在完成所有…

【LeetCode】210. 课程表 II——拓扑排序

题目链接&#xff1a;210. 课程表 II 题目描述&#xff1a; 现在你总共有 numCourses 门课需要选&#xff0c;记为 0 到 numCourses - 1。给你一个数组 prerequisites &#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示在选修课程 ai 前 必须 先选修 bi 。 例如…

【计算机网络】网络编程接口 Socket API 解读(7)

Socket 是网络协议栈暴露给编程人员的 API&#xff0c;相比复杂的计算机网络协议&#xff0c;API 对关键操作和配置数据进行了抽象&#xff0c;简化了程序编程。 本文讲述的 socket 内容源自 Linux man。本文主要对各 API 进行详细介绍&#xff0c;从而更好的理解 socket 编程。…

【Flowable】使用UEL整合Springboot从0到1(四)

前言 在前面我们介绍了Springboot简单使用了foleable以及flowableUI的安装和使用&#xff0c;在之前我们分配任务的处理人的时候都是通过Assignee去指定固定的人的。这在实际业务中是不合适的&#xff0c;我们希望在流程中动态的去解析每个节点的处理人&#xff0c;当前flowab…

9.12 C++作业

实现一个图形类&#xff08;Shape&#xff09;&#xff0c;包含受保护成员属性&#xff1a;周长、面积&#xff0c; 公共成员函数&#xff1a;特殊成员函数书写 定义一个圆形类&#xff08;Circle&#xff09;&#xff0c;继承自图形类&#xff0c;包含私有属性&#xff1a;半…

【Android知识笔记】UI体系(三)

View动画原理 当我们创建View动画时,一般使用类似如下代码: ScaleAnimation scaleAnimation = new ScaleAnimation(0,1,0,1); scaleAnimation.setDuration(3000); scaleAnimation.setFillAfter

Jest单元测试相关

官方文档&#xff1a;jest 中文文档 1、模拟某个函数&#xff0c;并返回指定的结果 使用Jest测试JavaScript(Mock篇) 有这样一个需求&#xff0c;mock掉Math.random方法&#xff08;0&#xff08;包括&#xff09;&#xff5e;1之间&#xff09;&#xff0c;使其返回指定的0…

华为Java工程师面试题

常见问题&#xff1a; 什么是Java虚拟机&#xff08;JVM&#xff09;&#xff1f;它与现实中的计算机有什么不同&#xff1f;Java中的基本数据类型有哪些&#xff1f;它们的范围是什么&#xff1f;什么是引用类型&#xff1f;Java中的引用类型有哪些&#xff1f;什么是对象&am…

PostgreSQL的主从复制方式

主从复制方式 PostgreSQL支持多种主从复制&#xff08;Master-Slave Replication&#xff09;方式&#xff0c;用于创建可靠的数据备份和故障容错解决方案。以下是几种常见的主从复制方式&#xff1a; 同步复制&#xff08;Synchronous Replication&#xff09;&#xff1a;在…

计算机网络TCP篇之流量控制

计算机网络TCP篇之流量控制 今天谈一谈我对于tcp流量控制的看法 在网络拓扑中如果发送方节点的发送速率大于接受方节点的接受速率&#xff0c;数据会不断在接受方的缓冲区累积&#xff0c;直到接受方的缓冲区满的时候&#xff0c;发送方继续发送数据&#xff0c;这时候接受方无…

Redis群集

目录 1、redis群集三种模式 2、Redis 主从复制 2.1 主从复制的作用 2.2 主从复制流程 2.3 搭建Redis 主从复制 3、Redis 哨兵模式 3.1 哨兵模式的作用 3.2 故障转移机制 3.3 主节点的选举 4、Redis 群集模式 4.1 集群的作用 4.2 Redis集群的数据分片 4.3 搭建Redis…

算法通关村18关 | 回溯模板如何解决分割回文串问题

1. 分割回文串 题目 LeetCode131 分割回文串&#xff0c;给你一个字符串s&#xff0c;请你将s分割成一些字串&#xff0c;使每个字串都是回文串&#xff0c;返回s所有可能的分割方案。 回文串是正着和反着读都是一样的字符串。 思路 知道回溯的模板&#xff0c;用回溯的角度思…

用python实现音乐下载

前言 本文背景 最近对音乐比较有需求&#xff0c;想着用自己学的python来实现一下下载需求&#xff0c; 真的是拿着锤子在满世界找钉子&#xff0c;**文末附全部代码**声明&#xff1a; 本文仅作技术交流&#xff0c;禁止用于其他非法途径本文2023年9月15日是可用的&#xff…

漫谈:C语言 值传递 函数参数 指针

C语言麻拐得很。 什么是变量&#xff1f;变量就是内存里面的一个东西&#xff0c;有值。 什么是“值传递”&#xff1f;C语言函数参数调用都是值传递&#xff0c;就是把变量的值给函数。 这里面一个大坑&#xff0c;就是函数参数究竟是什么&#xff1f;很多初学者对“值传递”、…

RUST 每日一省:全局变量

Rust中允许存在全局变量。它们一般有两种&#xff1a;常数和静态值。 常量 我们使用关键字 const 来创建常量。由于常量未使用关键字 let 声明&#xff0c;因此在创建它们时必须指定类型。常量只能进行简单赋值&#xff0c;并且没有固定的内存地址&#xff0c;无论它们在何处使…

Ubuntu 安装 Docker Engine

今天又装 docker 来着&#xff0c;看到英文官网上点来点去点进 Desktop 版本&#xff0c;而中文官网跳转安装网址有错误&#xff0c;所以写一下安装教程 ubuntu ubuntu 安装 docker engine 官网教程 更新apt包索引并安装包以允许apt通过 HTTPS 使用存储库&#xff1a; sudo …

2024字节跳动校招面试真题汇总及其解答(二)

1. 微服务的好处,划分原则 微服务是软件架构的一种模式,它将应用程序划分为一系列小型、独立的服务。每个服务都提供一个单独的功能,并使用轻量级的接口相互通信。 微服务架构具有以下好处: 灵活性:微服务可以独立部署、扩展和更新,这使得它们能够随着业务需求的变化而…

AI Studio星河社区生产力实践:基于文心一言快速搭建知识库问答

还在寻找基于文心一言搭建本地知识库问答的方案吗&#xff1f;AI Studio星河社区带你实战演练&#xff08;支持私有化部署&#xff09;&#xff01; 相信对于大语言模型&#xff08;LLM&#xff09;有所涉猎的朋友&#xff0c;对于“老网红”知识库问答不会陌生。自从大模型爆…