新用户注册入口 老用户登录入口

[转载]APl DOM文档对象模型

文章作者:转载 更新时间:2023-08-04 13:36:05 阅读数量:246
文章标签:元素获取事件处理节点操作样式属性自定义属性HTML5
本文摘要:本文详细介绍了JavaScript中DOM(文档对象模型)的核心概念,包括DOM树的结构以及如何通过ID、标签名、HTML5新增方法等获取页面元素。文章深入探讨了事件处理机制,列举了常见的鼠标事件,并展示了操作元素内容、属性、样式属性及自定义属性的方法,强调了HTML5中对自定义数据属性的支持。此外,还阐述了节点操作的重要性及其层级关系,如父节点、子节点和兄弟节点间的相互作用,并提供了创建新节点的方法。通过学习这些基于DOM的操作技术,开发者能够更好地利用JavaScript动态操控网页内容与行为。
转载文章

本篇文章为转载内容。原文链接:https://blog.csdn.net/m0_46978034/article/details/110190352。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

文章目录

    • 一.DOM简介
    • 1.什么是DOM
    • 2.DOM 树
    • 二.获取元素的方法
    • 1.根据ID获取
    • 2.根据标签名获取
    • 3.通过 HTML5 新增的方法获取(注意兼容)
    • 4.获取特殊元素(body,html)
    • 三.事件基础
    • 1.事件概述
    • 2.执行事件的步骤
    • 3.常见的鼠标事件
    • 四.操作元素
    • 1.操作元素内容(改变元素内容)
    • 2. 操作常见元素属性
    • 3.操作表单元素属性
    • 4.操作元素样式属性
    • 5.自定义属性的操作
    • 6.H5自定义属性
    • 五.节点操作
    • 1.为什么要学习节点操作
    • 2.节点概述
    • 3.节点层级

一.DOM简介

1.什么是DOM

  • 文档对象模型(简称DOM) 是W3C组织推荐的处理可扩展标记语言的标准编程接口 W3C已经定义来一系列DOM接口,通过这些DOM接口可以改变网页的内容、结构样式。

2.DOM 树

在这里插入图片描述

  • 文档:一个页面就是一个文档,DOM 中使用 document 表示
  • 元素:页面中的所有标签都是元素,DOM 中使用 element 表示
  • 节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM 中使用 node 表示
  • 文档树(Dom树):以html为根节点,形成的一颗倒立的树状结构,我们成为DOM树;这个树上所有的东西都叫节点,节点有很多类,比如文本节点,元素节点等等,这些节点如果我们通过DOM方法去获取或者其他的操作去使用就叫做DOM对象,所有节点都是DOM对象

二.获取元素的方法

1.获取页面中的元素可以使用以下几种方式

  • 根据ID获取
  • 根据标签名获取
  • 通过HTML5新增的方法获取
  • 特殊元素获取

1.根据ID获取

  • 使用getElementByld()方法可以获取带有ID的元素对象
  • getElementByld(),是document下的一个方法

代码演示

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

2.根据标签名获取

  • 使用getElementsByTagName()方法可以返回带有指定标签名的对象的集合
    语法如下
document.getElementsByTagName('标签名')

注意:

  • 1.因为得到的是一个对象的集合,使用我们想要操作里面的元素就需要遍历
  • 得到元素对象是动态的

代码演示

<body><ul><li>我们的征程是星辰大海</li><li>我们的征程是星辰大海</li><li>我们的征程是星辰大海</li><li>我们的征程是星辰大海</li><li>我们的征程是星辰大海</li></ul><ul id="nav"><li>心存感恩,所遇皆美好~</li><li>心存感恩,所遇皆美好~</li><li>心存感恩,所遇皆美好~</li><li>心存感恩,所遇皆美好~</li><li>心存感恩,所遇皆美好~</li></ul><script>// 1.返回的是 获取过来元素对象的集合 以伪数组的形式存储的var lis = document.getElementsByTagName('li')console.log(lis);// 2.如果想要依次打印里面的元素对象我们可以采取遍历方式for (var i = 0; i < lis.length; i++) {console.log(lis[i]);}// 3.这里可以是可以获取标签的.getElementsByTagName()可以得到这个元素里面的某些标签var nav1 = document.getElementById('nav') //这个获取nav元素var navli = nav.getElementsByTagName('li') //这里是获取nav 里面的li标签  要先获取 nav元素在获取里面的liconsole.log(navli);</script>
</body>

3.通过 HTML5 新增的方法获取(注意兼容)

1. document.getElementsByClassName(‘类名’);// 根据类名返回元素对象集合
2. document.querySelector('选择器'); // 根据指定选择器返回第一个元素对象
3. document.querySelectorAll('选择器'); // 根据指定选择器返回所有元素对象集合

注意:querySelector 和 querySelectorAll里面的选择器需要加符号,比如:document.querySelector(’#nav’);

代码演示

<body><div class="box">盒子1</div><div class="box">盒子2</div><div id="nav"><ul><li>首页</li><li>产品</li></ul></div><script>// 1. getElementsByClassName 根据类名获得某些元素集合var boxs = document.getElementsByClassName('box');console.log(boxs);// 2. querySelector 返回指定选择器的第一个元素对象  切记 里面的选择器需要加符号 .box  #navvar firstBox = document.querySelector('.box');console.log(firstBox);var nav = document.querySelector('#nav');console.log(nav);var li = document.querySelector('li');console.log(li);// 3. querySelectorAll()返回指定选择器的所有元素对象集合var allBox = document.querySelectorAll('.box');console.log(allBox);var lis = document.querySelectorAll('li');console.log(lis);</script>

4.获取特殊元素(body,html)

  • 获取body元素
 - doucumnet.body // 返回body元素对象
  • 获取html元素
. document.documentElement // 返回html元素对象

代码演示

<body><script>// 获取bdoy元素var bodyEle = document.bodyconsole.log(bodyEle); //返回body元素// 获取html元素var htmlEle = document.documentElementconsole.log(htmlEle); //返回html元素</script>
</body>

三.事件基础

1.事件概述

  • JavaScript 使我们有能力创建动态页面,而事件是可以被 JavaScript 侦测到的行为。
  • 简单理解: 触发— 响应机制。
  • 网页中的每个元素都可以产生某些可以触发 JavaScript 的事件,例如,我们可以在用户点击某按钮时产生一个
    事件,然后去执行某些操作。

代码演示

<body><button id="btn">浩哥</button><script>// 点击一个按钮,弹出一个对话框// 1.事件是有三部分组成的 1.事件源 2.事件类型 3.事件处理程序 也称为事件三要素// (1).事件源 事件被触发的对象  var but = document.getElementById('btn')// (2).事件类型   如何触发 什么事件 比如鼠标点击(removed) 还是鼠标经过还是????// (3).事件处理程序 通过一个函数赋值的方式 完成  因为函数就是实现某种功能的but.removed = function() {alert('浩哥爱编程')}</script>
</body>

在这里插入图片描述

2.执行事件的步骤

1. 获取事件源DOM对象(意思是你要获取那个元素)
2. 注册事件(绑定事件 意思是通过什么方式来处理比如是鼠标经过还是鼠标点击等等行为)
3. 添加事件处理程序(采取函数赋值形式 意思是你想做啥)

代码演示

<body><div>123</div><script>// 事件执行步骤   点击div 控制台输出我被选中了// 1.获取事件源var div = document.querySelector('div')// 2.绑定事件 注册事件// div.removed// 3.添加事件处理程序div.removed = function() {console.log('我被点击了');}</script>
</body>

在这里插入图片描述

3.常见的鼠标事件

在这里插入图片描述
onmouseenter鼠标移入事件
onmouseleave鼠标移出事件

四.操作元素

JS的DOM操作可以改变网页内容、结构和样式,利用DOM操作元素来改变元素里面的内容、属性等。注意以下都是属性

1.操作元素内容(改变元素内容)

elemeny.innerText

从起始位置到终止位置的内容,但它去除html标签,同时空格和换行也会去掉

elemernt.innerHTML

起始位置到终止位置的全部内容,包括html标签,同时保留空格和换行

elemernt.Content可以获取隐藏元素的文本,包含换行和空白

代码演示

  <title>Document</title><style>div,p {height: 30px;width: 300px;line-height: 30px;text-align: center;color: #fff;background-color: pink;}</style>
</head><body><button>显示当前系统时间</button><div>某个时间</div><p>123</p><script>// 当我们点击了按钮,div里面的文字会发生变化// 1.获取元素  注意这里的按钮 和div都要获取到 因为 点击按钮div里面要发生变化所以都要获取var but = document.querySelector('button');var div = document.querySelector('div');// 2.绑定事件// but.removed// 3.程序处理but.removed = function() {// 改变元素内容 element(元素).innerTextdiv.innerText = '2020-11-27'}// 4.我们元素可以不用添加事件,就可以直接显示日期var p = document.querySelector('p');p.innerText = '2020-11-27';</script>

在这里插入图片描述

elemeny.innerText和elemeny.innerHTML的区别
代码演示

<body><div></div><p></p><ul><li> 文字</li><li>123</li></ul><script>// innertText 和 innertHTML 的区别// 1. innerText 不识别html标签 非标准 去除空格和换行var div = document.querySelector('div');div.innerText = '<strong>今天是:</strong> 2020';// 2.innertHTML 识别html标签 W3C标准 保留空格和换行的   推荐尽量使用这个 因为这个是标准var p = document.querySelector('p')p.innerHTML = '<strong>今天是:</strong> 2020';// 3.这俩个属性是可读写的 意思是 除了改变内容还可以元素读取里面的内容的var ul = document.querySelector('ul')console.log(ul.innerText);console.log(ul.innerHTML);// .4innerHtml   innerText  之间的区别:设置内容的时候,如果内容当中包含标签字符串   innerHtml会有标签的特性,也就是说标签会在页面上生效如果内容当中包含标签字符串   innerText会把标签原样展示在页面上,不会让标签生效读取内容的时候,如果标签内部还有其它标签,innerHtml会把标签内部带着其它的标签全部输出如果标签内部还有其它标签,innerText只会输出所有标签里面的内容或者文本,不会输出标签如果标签内部没有其它标签,他们两个一致;都是读取文本内容,innerHtml会带空白和换行</script>
</body>

在这里插入图片描述

2. 操作常见元素属性

  1. innerText、innerHTML 改变元素内容
  2. src、href
  3. id、alt、title

代码演示

<body><button id="ldh">刘德华</button><button id="zxy">张学友</button><br><img src="./images/ldh.jpg" alt="" width="200px" height="200px" title="刘德华" id="img"><script>// 修改属性 src// 我们可以操作元素得方法 来修改元素得属性 就是 元素的是什么属性 在重新给值就可以完成相应的赋值操作了// 1.获取元素var ldh = document.getElementById('ldh')var zxy = document.getElementById('zxy')var img = document.getElementById('img')// 2.注册事件 程序处理zxy.removed = function() {// 当我们点击了图片的时候图片路径就发生变化   这里的.表示 的 得意思 img对象下的src属性img.src = './images/zxy.jpg';// 当我们变换图片得同时里面得title也要跟着变 所以前面要加上img.img.title = '张学友';}ldh.removed = function() {img.src = './images/ldh.jpg';img.title = '刘德华';}</script>

在这里插入图片描述

3.操作表单元素属性

利用DOM可以操作如下表单元素的属性

type、value、checked、selected、disabled

代码演示:

<body><button>按钮</button><input type="text" value="输入内容"><script>// 我想把value里面的输入内容改变为 被点击了// 1.获取元素var but = document.querySelector('button')var input = document.querySelector('input')// 2.注册事件 处理程序but.removed = function() {// input.innerHTML = '被点击了'; 这个是 普通盒子 比如 div 标签里面的内容// 表单里面的值 文字内容是通过value来修改的input.value = '被点击了'// 如果需要某个表单被禁用 不能再点击了使用 disabled  我们想要这个按钮 button禁用// but.disabled = true// 还有一种写法// this指向的是事件函数的调用者 谁调用就指向谁 这里调用者是btnthis.disabled = true}</script>
</body>

在这里插入图片描述

4.操作元素样式属性

我们可以通过 JS 修改元素的大小、颜色、位置等样式。

 1.element.style 行内样式操作

注意:

  • JS 里面的样式采取驼峰命名法 比如 fontSize、 backgroundColor
  • JS 修改 style 样式操作,产生的是行内样式,所以行内式比内嵌式高

代码演示

   <style>div {width: 200px;height: 200px;background-color: red;}</style>
</head><body><div></div><script>// 要求点击div变成粉色 height变为250px// 1.获取元素var div = document.querySelector('div');// 2.注册事件 处理程序div.removed = function() {// div.style里面的属性 采取的是驼峰命名法// this等于div this调用者 谁调用谁执行this.style.backgroundColor = 'pink'this.style.height = '250px'}</script>

在这里插入图片描述

 2.element.className 类名样式操作

注意:

  • 如果样式修改较多,可以采取操作类名方式更改元素样式。
  • class因为是个保留字,因此使用className来操作元素类名属性
  • className 会直接更改元素的类名,会覆盖原先的类名。

代码演示

  <style>div {width: 100px;height: 100px;background-color: pink;}.change {background-color: purple;color: #fff;font-size: 25px;margin-top: 100px;}</style>
</head><body><div class="first">文本</div><script>// 1. 使用 element.style 获得修改元素样式  如果样式比较少 或者 功能简单的情况下使用var test = document.querySelector('div');test.removed = function() {// this.style.backgroundColor = 'purple';// this.style.color = '#fff';// this.style.fontSize = '25px';// this.style.marginTop = '100px';// 让我们当前元素的类名改为了 change// 2. 我们可以通过 修改元素的className更改元素的样式 适合于样式较多或者功能复杂的情况 如果想继续添加样式即在change添加即可// 3. 如果想要保留原先的类名,我们可以这么做 多类名选择器// this.className = 'change';this.className = 'first change';}</script>

在这里插入图片描述

5.自定义属性的操作

js给我们规定了可以自己添加属性 在操作元素属性的时候,元素.语法只能操作元素天生具有的属性,如果是自定义的属性,通过.语法是无法操作的只能通过getAttribute和setAttribute去操作,他俩是通用的方法,无论元素天生的还是自定义的都可以可以操作
1.获取属性值

  • element.属性 获取属性值。
  • element.getAttribute(‘属性’);

区别:

  • element.属性 获取内置属性值(元素本身自带的属性 如果是自定义属性不能被获取)
  • element.getAttribute(‘属性’);主要获得自定义的属性 (标准) 我们自定义的属性

2.设置属性值

  • element.属性 = ‘值’ 设置内置属性值
  • element.setAttribute(‘属性’,‘值’)

区别:

  • element.属性 设置内置属性值
  • element.setAttribute(‘属性’);主要设置自定义的属性(标准)

3.移除属性

  • element.removeAttribute(‘属性’);

代码演示

<body><div id="demo" index="1" class="nav"></div><script>var div = document.querySelector('div');// 1.获取元素的属性值// (1) element.属性console.log(div.id);// (2) element.getAttribute('属性') get获取得到 attribute属性的意思 我们自己添加的属性称之为自定义属性console.log(div.getAttribute('id')); //democonsole.log(div.getAttribute('index')); // 1// 2.设置元素的属性值// (1) element.属性 = '值' div.id = 'test'div.className = 'navs'// (2) element.setAttribute('属性','值')div.setAttribute('index', 2);div.setAttribute('class', 'footer') //这里就是class 不是className 比较特殊// 3.移除属性 removeAttribute(属性)div.removeAttribute('index');</script>
</body>
  • 只要是自定义属性最好都是用element.setAttribute(‘属性’,‘值’)来设置 如果是自带属性用element.属性来设置

6.H5自定义属性

自定义属性的目的:第一、是为了保存属性 第二、并且使用数据。有一些数据可以保存到页面中而不用保存到数据库中。
自定义属性获取是通过getAttribute(‘属性’) 获取的
但是有些自定义属性很容易引起歧义,不容易判断是元素还是自定义属性
H5给我们新增了自定义属性:
1.设置H5自定义属性

  • H5规定自定义属性data-开头做为属性名并且赋值 比如<div data-index:“1”>
  • 或者使用JS设置element.setAttribute(‘deta-index’,2)

2.获取H5自定义属性

  • 兼容性获取 element.getAttribute(‘data-index’) 推荐开发中使用这个
  • H5新增element.dataset.index 或者element.datase[‘index’] ie 11以上才支持

代码演示

<body><div getTime="10" data-index="20" data-name-list="40"></div><script>// 获取元素var div = document.querySelector('div');console.log(div.geTime); //undefined  getTime是自定义属性不能直接通过元素的属性来获取 而是用自定义属性来获取的getAttribute(‘属性’)console.log(div.getAttribute('getTime')); //10// H5添加自定义属性的写法以data-开头div.setAttribute('data-time', 30)// 1.兼容性获取H5自定义属性console.log(div.getAttribute('data-time')); // 30// 2.H5新增的获取自定义属性的方法  它只能获取data-开头的// dataset 是一个集合的意思存放了所有以data开头的自定义属性  如果你想取其中的某一个只需要在dataset.的后面加上自定义属性名即可console.log(div.dataset);console.log(div.dataset.time); // 30// 还有一种方法dataset['属性']console.log(div.dataset['time']); // 30// 如果自定义属性里面有多个-链接的单词 我们获取的时候采取驼峰命名法 不用要-了console.log(div.dataset.nameList); // 40console.log(div.dataset['nameList']); // 40</script>
</body>

五.节点操作

1.为什么要学习节点操作

获取元素通常使用俩种方式
(1)利用DOM提供的方法获取元素 但是逻辑性不强 繁琐
(2)利用节点层级关系获取元素 如 利用父子,兄弟关系获取元素 逻辑性强,但是兼容性不怎么好

2.节点概述

网页中的所有内容都是节点(标签、属性、文本、注释等等) ,在DOM中,节点使用node表示。HTML DOM
树中的所有节点均可通过javascript进行访问,所有HTML元素(节点) 均可被修改,也可以创建或删除
在这里插入图片描述一般地,节点至少拥有nade Type(节点类型)、nodeName(节点名称)和nodeValue(节点值) 这三个基本属性

  • 元素节点 nodeType 为 1
  • 属性节点 node Name为 2
  • 文本节点 nodeValue为 3 (文本节点包含文字、空格、换行等等)

实际开发中,节点操作主要操作的是元素节点

3.节点层级

利用DOM树可以把节点划分为不同得层级关系,常见得是父子兄层级关系

1.父级节点

1.node.parentNode
  • parenNode属性可以返回某节点得父节点,注意是最近的父节点哟!!!
  • 如果指定的节点没有父节点就返回null

代码演示

<body><div class="box"><div class="box1"></div></div><script>var box1 = document.querySelector('.box1')// 得到的是离元素最近的父节点(亲爸爸) 得不到就返回得是nullconsole.log(box1.parentNode); // parentNode 翻译过来就是父亲的节点</script>
</body>

2.子级节点操作

1.parentNode.children(非标准)

parentNode.children 是一个只读属性,返回所有的子元素节点。它只返回子元素节点,其余节点不返回(重点记住这个就好,以后重点使用)
虽然children是一个非标准,但是得到了各个浏览器的支持,我们大胆使用即可!!!

代码演示

<body><ul><li>1</li><li>1</li><li>1</li><li>1</li></ul><script>//   DOM 提供的方法(APL)获取 这样获取比较麻烦var ul = document.querySelector('ul')var lis = ul.querySelectorAll('li')// children子节点获取  ul里面所有的小li 放心使用没有限制兼容性 实际开发中经常使用的console.log(ul.children);</script>

如何返回子节点的第一个和最后一个?

2.parentNode.firstElementChild

firstElementChild返回第一个子元素节点,找不到则返回unll

3.parentNode.lastElementChild

lastElementChild返回最后一个子元素节点,找不到则返回null

注意:这俩个方法有兼容性问题,IE9以上才支持 谨慎使用
但是我们有解决方案

如果想要第一个子元素节点,可以使用 parentNode.chilren[0] 
如果想要最后一个子元素节点,可以使用 parentNode.chilren[parentNode.chilren.length - 1] 

代码演示

<body><ul><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul><script>var ul = document.querySelector('ul')// 1.firstElementChild 返回第一个子元素节点 ie9 以上才支持注意兼容console.log(ul.firstElementChild);// 2.lastElementChild返回最后一个子元素节点console.log(ul.lastElementChild);// 3.实际开发中用到的既没有兼容性问题又可以返回子节点的第一个和最后一个console.log(ul.children[0]);console.log(ul.children[ul.children.length - 1]); //ul.children.length - 1获取的永远是子节点最后一个</script>
</body>

3.兄弟节点

1.node.nextSibling

nextSibling 返回当前元素的下一个兄弟节点,找不到则返回null。注意包含所有的节点

2.node.previousSibling 

previousSibling 返回当前元素上一个兄弟节点,找不到则返回null。注意包含所以有的节点

代码演示

<body><div>我是div</div><span>我是span</span><script>var div = document.querySelector('div')// 返回当前元素的下一个兄弟节点nextSibling,找不到返回null。注意包含元素节点或者文本节点等等console.log(div.nextSibling); //这里返回的是#text 因为它的下一个兄弟节点是换行// 返回的是当前元素的上一个节点previousSibling,找不到返回null。注意包含元素节点或者文本节点等等console.log(div.previousSibling); //这里返回的是#text 因为它的上一个兄弟节点是换行</script>
</body>
3.node.nexElementSibling

nexElementSibling 返回当前元素下一个兄弟元素节点,找不到返回null

4.node.previousElementSibling

previousElementSibling返回当前元素上一个兄弟节点,找不到返回null

注意:这俩个方法有兼容性问题,IE9以上才支持

代码演示

<body><div>我是div</div><span>我是span</span><script>var div = document.querySelector('div')// nextElementSiblingd得到下一个兄弟元素节点console.log(div.nextElementSibling); // span  // previousElementSibling  得到的是上一个兄弟元素节点console.log(div.previousElementSibling); // null 因为它上面没有兄弟元素了返回空的</script>
</body>

怎么解决兼容性问题呢?
可以封装一个兼容性函数(简单了解即可 在实际开发中用的不多)

function getNextElementSibling(element) {var el = element;while (el = el.nextSibling) {if (el.nodeType === 1) {return el;} }return null;}

4.创建节点

1.document.createElement('tagName')

document.createElement( ) 方法创建由 tagName 指定的 HTML 元素。因为这些元素原先不存在的是根据我们的需求动态生成的,所有我们也称为动态创建元素节点

我们创建了节点要给添加到节点里面去 称为 添加节点

1.node.appendChild(child)

node.appendChild( )方法将一个节点添加到指定父节点的子节点列表末尾

2.node.insertBefore(child,指定添加元素位置)

node.insertBefore( ) 方法将一个节点添加到父节点的指定子节点前面

代码演示

<body><ul><li>1</li></ul><script>// 1.创建节点 createElementvar li = document.createElement('li')// 2.添加节点 创建了节点要添加到某一个元素身上去 叫添加节点 node.appendChild(child) done 父级 child 子级 如果前面有元素了则在后面追加元素类似数组中的push依次追加var ul = document.querySelector('ul')ul.appendChild(li)// 3.添加节点 node.insertBefore(child,指定元素) 在子节点前面添加子节点 child子级你要添加的元素var lili = document.createElement('li')ul.insertBefore(lili, ul.children[0]) //ul.children 这句话的意思是添加到ul父亲的子节点第一个// 总结 如果想在页面中添加元素分为俩步骤1.创建元素 2.添加元素</script>
</body>

在这里插入图片描述
5.删除节点

node.removeChild(child)

node.removeChlid()方法从DOM 中删除一个子节点,返回删除的节点 简单点就是从父元素中删除某一个孩子node就是父亲child就是孩子

删除的节点.remove(没有参数) 注意:ie不支持

代码演示

<body><button>按钮</button><ul><li>熊大</li><li>熊二</li><li>熊三</li></ul><script>// 1.获取元素var ul = document.querySelector('ul')var but = document.querySelector('button');// 2.删除元素// but.removed = function() {//     ul.removeChild(ul.children[0])// }// 3.点击按钮键依次删除,最后没有删除内容了 就禁用按钮 disabled = true 禁用按钮语法but.removed = function() {if (ul.children.length == 0) {this.disabled = true} else {ul.removeChild(ul.children[0])} }</script>
</body>

在这里插入图片描述
6.复制节点(克隆节点)

node.cloneNode()

node.dloneNode()方法返回调用该方法节点得一个副本,也称为克隆节点/拷贝节点

注意
1.如果括号参数为空或者为false,则是浅拷贝,只复制里面得标签,不复制内容
2.如果括号参数为true,则是深度拷贝,会复制节点本身以及里面所有的内容

代码演示

<body><ul><li>1</li><li>2</li><li>3</li></ul><script>// 1.获取元素var ul = document.querySelector('ul');// 2.复制元素 node.cloneNode()   如果参数括号为空或者false则只会复制元素不会复制内容,如果待有参数true则内容和元素都会被复制var lis = ul.children[0].cloneNode(true);// 3.获取元素ul.appendChild(lis)</script>
</body>

在这里插入图片描述
7.替换(改)节点

node.replaceChild(新节点,替换到什么位置)

代码演示

<body><ul class="list"><li>1</li><li>2</li></ul><script>// 替换(改)节点    父节点.replaceChild(新元素, 替换到什么位置)// (1)获取父元素var ulNode = document.querySelector('.list');// (2)创建新的元素var liRead = document.createElement('li')// (3)给新元素添加内容liRead.innerHTML = '5';// (4)替换元素ulNode.replaceChild(liRead, ulNode.children[1])</script>
</body>

8.三种动态创建元素区别

  • document.write()
  • element.innerHTML
  • document.createElement()

区别

  1. document.write()是直接将内容写入页面的内容流,但是文档流执行完毕,它则会导致页面全部重绘
  2. element.innerHTML是将内容写入某个DOM节点,不会导致页面全部重绘
  3. element.innerHTML 创建多个元素效率更高(不要拼接字符串,采取数组形式拼接),结果有点复杂
  4. createElement()创建多个元素效率低一点点,但是结果更加清晰

总结:不同浏览器下,innerHTML效率要比createElement()高

代码演示

<body><button>点击</button><p>abc</p><div class="inner"></div><div class="create"></div><script>// window.onload = function() {//         document.write('<div>123</div>');//     }// 三种创建元素方式区别 // 1. document.write() 创建元素  如果页面文档流加载完毕,再调用这句话会导致页面重绘// var btn = document.querySelector('button');// btn.removed = function() {//     document.write('<div>123</div>');// }// 2. innerHTML 创建元素var inner = document.querySelector('.inner');// for (var i = 0; i <= 100; i++) {//     inner.innerHTML += '<a href="#">百度</a>'// }var arr = [];for (var i = 0; i <= 100; i++) {arr.push('<a href="#">百度</a>');}inner.innerHTML = arr.join('');// 3. document.createElement() 创建元素var create = document.querySelector('.create');for (var i = 0; i <= 100; i++) {var a = document.createElement('a');create.appendChild(a);}</script>
</body>

在这里插入图片描述

本篇文章为转载内容。原文链接:https://blog.csdn.net/m0_46978034/article/details/110190352。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
文档对象模型(DOM)文档对象模型是一种由W3C组织推荐的标准编程接口,用于处理可扩展标记语言(如HTML和XML)。在JavaScript中,DOM将网页结构表示为一系列节点的集合,这些节点可以是元素、属性或文本等。通过DOM API,开发者能够动态地访问、修改和操作网页内容、结构及样式,实现与用户的交互功能。
节点层级关系在DOM树中,所有网页内容被组织成一个层次结构,每个元素、文本或其他内容都被视为一个节点,并且具有父子、兄弟等层级关系。例如,某个元素节点可能有多个子节点,同时它自身也是其父节点的一个子节点。通过理解并利用这种层级关系,开发者可以精准定位并操作页面中的特定节点。
事件处理机制在Web开发中,事件处理机制允许JavaScript代码对用户或浏览器产生的特定行为(称为“事件”)做出响应。当触发事件时,如鼠标点击、键盘输入或页面加载完成,预先绑定到该事件上的函数将会被执行。这一机制使得网页具备了动态交互的能力,例如通过监听点击事件来响应按钮点击,或通过监听窗口加载事件来初始化页面内容。
自定义属性(data-*属性)HTML5引入了一种自定义属性的标准方法,即以"data-"开头的属性。这些自定义属性可以用来存储额外的数据信息,而不会影响到HTML标签的语义或默认行为。通过JavaScript,可以使用`dataset`属性便捷地获取和设置这些数据属性值,增强了HTML元素的数据承载能力,同时也便于脚本进行数据驱动的动态渲染和交互逻辑处理。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
在深入学习和理解了文档对象模型(DOM)的基础知识之后,我们可以进一步关注DOM技术的最新发展动态与应用场景。近年来,随着Web前端技术的飞速进步,DOM操作在现代JavaScript框架如React、Vue.js和Angular中扮演着至关重要的角色。例如,React通过虚拟DOM实现高效的UI更新策略,大大提升了网页渲染性能。
同时,在Web组件化开发领域,Custom Elements V1规范已得到广泛支持,开发者可以通过自定义HTML元素并扩展其行为,这背后离不开DOM API的强力支撑。例如,借助MutationObserver接口可以监听DOM树的变化,实现实时响应式布局。
此外,无障碍性(Accessibility)也是当前Web开发的重要考量因素之一,正确且高效的DOM操作有助于提升网站对屏幕阅读器等辅助技术的支持,确保信息能够无障碍地传达给所有用户。
近期,W3C还在持续推动DOM标准的发展,如Shadow DOM v1规范让组件样式和DOM结构更加独立和可控,对于构建复杂Web应用具有重要意义。了解和掌握这些前沿技术和标准,将有助于开发者更好地利用DOM API创建高性能、可维护且符合现代Web标准的页面和应用。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
dig @resolver domain NS - 查询域名的DNS名称服务器记录。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
可自定义logo的jQuery生成二维码插件 01-03 jquery每日签到日历插件 10-10 高度可定制的jQuery瀑布流网格布局插件 03-15 Consul中服务实例自动注销问题解析:健康检查、稳定性与Agent配置的影响及解决策略 01-22 怎么看mysql 的安装路径 12-31 jquery横向手风琴效果 12-23 蓝色数码电子产品销售HTML5网站模板 12-14 jQuery和CSS3汉堡包导航菜单打开动画特效 10-19 python模拟生存游戏 10-08 本次刷新还10个文章未展示,点击 更多查看。
jQuery.eraser-实现橡皮擦擦除功能的jquery插件 05-26 Netty中ChannelNotRegisteredException异常处理:理解原因与确保Channel注册状态的方法示例 05-16 响应式游戏开发类企业前端cms模板下载 05-02 精美的花甲美食网站HTML模板下载 03-09 soulmate粉色干净浪漫唯美婚礼单页响应式网站模板 03-07 Vue.js项目中proxyTable数据转发遭遇504错误:服务器响应时间与网络连接问题排查及解决方案 03-05 SpringCloud服务路由配置错误与失效:识别问题、排查步骤及组件解析这个涵盖了的核心内容,包括SpringCloud框架下的服务路由配置错误失效问题的识别,以及涉及到的服务注册中心、Gateway、Zuul等组件的功能解析和故障排查的具体步骤。同时,字数控制在了50个字以内,满足了要求。 03-01 css水平线长度设置 02-11 [转载]Proxy 、Relect、响应式 01-11 蓝色响应式软件营销代理公司网站静态模板 01-06 python正太分布校验 01-05
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"