DOM(二)修改元素内容、属性

article/2025/8/24 3:11:36

        一个元素可以修改它的内容属性样式


目录

DOM修改元素

1. 修改内容

2. 修改属性


DOM修改元素

1. 修改内容

(1)获取从修改元素开始标签到结束标签之间的原始的 HTML 内容

元素对象.innerHTML

innerHTML 获取元素内容时,原样返回 HTML 代码中的 html 内容,不做任何加工;修改元素内容时,innerHTML 会先将字符串内容交给浏览器解析,解析后显示在页面上。

(2)获取或修改元素开始标签到结束标签之间的纯文本内容

元素对象.textContent

获取元素内容时,textContent 去掉内嵌的标签,并将特殊符号转为正文,然后返回修改后的内容;修改元素内容时,不会将字符串内容交给浏览器解析,而是直接保持字符串的原样内容输出。

举例:分别使用 innerHTML 和 textContent 获取和修改元素的内容;

<body><h3 id="msg">来自<a href="#">&lt;&lt;新华社&gt;&gt;</a>的消息</h3><h3 id="msg2"></h3><h3 id="msg3"></h3><script>var h3Msg = document.getElementById("msg");var h3Msg2 = document.getElementById("msg2");var h3Msg3 = document.getElementById("msg3");//试图获取h3Msg的innerHTML内容console.log(h3Msg.innerHTML);//试图获取h3Msg的textContent内容console.log(h3Msg.textContent);//试图修改h3Msg2的innerHTML内容为一段带有HTML片段的内容var str = `来自<a href="#">&lt;&lt;新华社&gt;&gt;</a>的消息`;h3Msg2.innerHTML = str;//试图修改h3Msg3的textContent内容为一段带有HTML片段的内容h3Msg3.textContent = str;</script>
</body>

获取与修改效果如下:

(3)获取或修改表单元素的内容

         绝大多数表单元素都是 input 元素,而 input 元素是单标记,没有结束标签,所以不能使用 innerHTML 和 textContent 来获取和修改内容。想要获取或修改表单元素的值时,要用 value 代替 innerHTML 和 textContent

2. 修改属性

(1)字符串类型的 HTML 标准属性

        HTML 标准中规定的,属性值为字符串的属性,如 class, id, name, value, href, title, ...

a. 旧核心 DOM4 个函数:

i. 获取属性值:元素对象.getAttribute("属性名")

ii. 修改属性值:元素对象.setAttribute("属性名", "新值")

iii. 判断是否包含某个属性:元素对象.hasAttribute("属性名")

iv. 移除属性:元素.removeAttribute("属性名")

b.新的简化版HTML DOM:

        新的 HTML DOM 已经将所有 HTML 标准属性,提前保存在了内存中的元素对象身上,只不过页面上暂时没用到的属性,默认值为""而已;今后只要操作 HTML 标准属性,就都可用".属性名"方式操作。

i. 获取属性值:元素对象.属性名

ii. 修改属性值:元素对象.属性名=属性值

iii. 判断是否包含某个属性:元素.属性名!==" "  说明包含该属性

iv. 移除属性:元素对象.属性名=""

        但是并不是所有情况都适用于新简化版,ES6 基础语法中已经将 class 定义为关键字,有特殊功能,专门用于创建一种类型。所以 DOM 标准就不能重复使用 "class" 这个属性名;所以今后在 DOM 中用 获取或修改元素的class属性值时,必须换成".className"

举例:使用核心 DOM 和  HTML DOM 两种方式操作 a 元素的属性;

<body><a id="a1" href="http://tmooc.cn" title="Welcome to tmooc">go to tmooc</a><script>var a1 = document.getElementById("a1");//用console.log输出a1的标签console.log(a1);//用console.dir输出a1对象在内存中的属性console.dir(a1);//获取a1的title属性值a1.getAttribute("title");a1.title; //简化//修改a1的title属性值为欢迎访问tmooca1.setAttribute("title", "欢迎访问tmooc");a1.title = "欢迎访问tmooc"; //简化//判断是否包含target属性a1.hasAttribute("target"); //falsea1.target !== ""; //简化//添加target属性a1.setAttribute("target", "_blank");a1.target = "_blank"; //简化//判断是否包含target属性a1.hasAttribute("target"); //truea1.target !== ""; //简化//移除id属性a1.removeAttribute("id");a1.id = ""; //简化//输出最后的a1console.log(a1);</script>

案例:手风琴/伸缩菜单效果

HTML/CSS 结构与效果如下:

<ul class="tree"><li><span class="open">考勤管理</span><ul><li>日常考勤</li><li>请假申请</li><li>加班/出差</li></ul></li><li><span>信息中心</span><ul><li>通知公告</li><li>公司新闻</li><li>规章制度</li></ul></li><li><span>协同办公</span><ul><li>公文流转</li><li>文件中心</li><li>内部邮件</li><li>即时通信</li><li>短信提醒</li></ul></li>
</ul>
li {list-style: none;
}
li span {padding-left: 20px;cursor: pointer;background: url("images/add.png") no-repeat center left;
}
li ul {display: none;
}
.open {background: url("images/minus.png") no-repeat center left;
}
.open+ul {display: block;
}

 页面结构如图:

页面效果如图:

需要通过 DOM 实现:点击加号按钮时菜单展开,加号变为减号,再次点击时菜单合并;

<script>//DOM 4步//1. 查找触发事件的元素// 本案例中触发事件的元素为ul下li下的spanvar spans = document.querySelectorAll("ul>li>span");//2. 绑定事件处理函数for (var span of spans) {span.onclick = function () {// 如果点击时span的属性不为open,说明该菜单未展开,执行展开if (this.className !== "open") {//3. 查找要修改的元素//4. 修改元素// 先查找所有的span,清除所有span的open属性var span = document.querySelectorAll("ul>li>span");for (var span of spans) {// 清除所有span的open(让它们都闭合)span.className = "";}// 点击时再展开this.className = "open";} else { //若点击时span的属性为open,说明菜单已经展开,执行关闭this.className = "";}}}
</script>

展示效果如下:


(2)bool 类型的 HTML 标准属性

        HTML标准中规定,不需要写属性值,只靠属性名就可发挥作用。

a:核心 DOM 函数

i. 添加 bool 类型的 HTML 标准属性:

        标准:元素.setAttribute(“属性名”,”属性名”);

        简写:元素.setAttribute(“属性名”,””);

        举例:input.setAttribute(“disabled”,”disabled”);  //禁用文本框

                   input.setAttribute(“disabled”,””);  //禁用文本框

ii. 移除 bool 类型 HTML 标准属性

        标准:元素.removeAttribute(“属性名”)

        举例:input.removeAttribute(“disabled”)  //启用文本框

iii. 判断元素当前处于何种状态

        有哪个属性,就说明处于哪种状态;没有哪个属性,说明没有处于哪种状态。

        标准:元素.hasAttribute(“属性名”)

        举例:input.hasAttribute(“disabled”)//判断文本框是启用,还是禁用

b:新 HTML DOM

标准:元素.属性名(属性值必须是bool类型的true或false)

举例:判断元素现在处于何种状态;元素.属性名

           修改状态;元素.属性名=bool值

举例:全选和取消全选

<body><input id="txt" disabled="enabled"><h2>管理员列表</h2><table border="1px" width="500px"><thead><tr><th><input type="checkbox" />全选</th><th>管理员ID</th><th>姓名</th><th>操作</th></tr></thead><tbody><tr><td><input type="checkbox" /></td><td>1</td><td>Tester</td><td>修改 删除</td></tr><tr><td><input type="checkbox" /></td><td>2</td><td>Manager</td><td>修改 删除</td></tr><tr><td><input type="checkbox" /></td><td>3</td><td>Analyst</td><td>修改 删除</td></tr><tr><td><input type="checkbox" /></td><td>4</td><td>Admin</td><td>修改 删除</td></tr></tbody></table><script>//功能一,点上方checkbox,控制下方所有checkbox//DOM 4步//1. 查找触发事件的元素//本例中: 查找thead下的tr下的第一个th下的inputvar chbAll = document.querySelector("thead>tr>th:first-child>input")//2. 绑定事件处理函数chbAll.onclick = function () {//3. 查找要修改的元素//本例中: 修改tbody下每个tr下第一个td中的inputvar chbs = document.querySelectorAll("tbody>tr>td:first-child>input")//4. 修改元素//本例中: 让tbody中每个checkbox的checked属性与当前点击的全选checkbox的选中状态(checked)相同for (var chb of chbs) {chb.checked = this.checked;}}//功能二: 点tbody中每个checkbox,都可能影响thead中的全选checkbox//DOM 4步//1. 查找触发事件的元素// 本例中:查找tbody下每个tr下第一个td中的inputvar chbs = document.querySelectorAll("tbody>tr>td:first-child>input");//2. 绑定事件处理函数for (var chb of chbs) {chb.onclick = function () {//3. 查找要修改的元素//本例中: 查找thead中tr下第一个th中的inputvar chbAll = document.querySelector("thead>tr>th:first-child>input");//4. 修改元素//尝试查找tbody中一个未选中的checkbox	var unchecked = document.querySelector("tbody>tr>td:first-child>input:not(:checked)");//如果找到未选中的checkbox,则thead中的全选checkbox就不能选中if (unchecked != null) {chbAll.checked = false;} else {//否则如果没找到未选中的checkbox,则thead中的全选checkbox才能选中chbAll.checked = true;}}}</script>
</body>

补充:this 6种用法

(1)obj.fun()  this->点前的obj对象;

(2)new Fun()   this指new正在创建的新对象;

(3)类型名.prototype.共有方法=function(){ ... }  ;将来谁调用函数,this就指谁;

(4)un() 和 回调函数 和 匿名函数自调 this默认指window;

(5)访问器属性中的this指当前访问器属性所在的对象;

(6)DOM和jQuery中事件处理函数中的this指当前正在触发事件的DOM元素对象本身。


http://chatgpt.dhexx.cn/article/ui0xE7bD.shtml

相关文章

UN Comtrade(联合国商品贸易统计数据库)数据爬取Python代码

目录 Python代码 根据需求改写url 报错应对办法 UN Comtrade数据库关于中国台湾的数据 2021/9/28更新&#xff1a;最近有用户反馈下载会出现错误内容如下图&#xff0c;感谢用户三眼皮138帮忙找出错误。官方应该是更新API的使用了&#xff0c;在爬取数据是将url中的关键词m…

uni-app中动态修改伪类元素的样式

1.首先定义一个变量 2.在伪元素的父元素上面动态添加style&#xff0c;注意这个 设置的变量 --state 因为下面是 var 调用的所以需要加两个杠. 3.使用var调用变量 --state

selenium的常见表单元素操作

selenium的表单相关操作 selenium是浏览器自动化测试框架&#xff0c;是一个用于Web应用程序测试的工具&#xff0c;可以直接运行在浏览器当中&#xff0c;并可以驱动浏览器执行指定的动作&#xff0c;如点击、下拉、填充数据、删除cookie等操作&#xff0c;还可以获取浏览器当…

Web API:ResizeObserver——监听元素大小的变化

前言 最近突然发现了ResizeObserver 感觉挺有用的就简单学习了一下。 众所周知window.resize事件能帮我们监听窗口大小的变化。但是reize事件会在一秒内触发将近60次&#xff0c;所以很容易在改变窗口大小时导致性能问题。换句话说&#xff0c;window.resize事件通常是浪费的…

法规标准-UN R157标准解读

文章目录 UN R157是做什么的&#xff1f;ALKS系统一般要求动态驾驶任务本车道内行驶允许越过车道线执行LCP变道程序在EM期间进行回避车道交叉为应急车辆和执法车辆形成通道部分进入相邻车道&#xff0c;以绕过部分阻塞车道的障碍物 激活系统控制车速跟车停止前车减速、切入、切…

图像分割UNet系列------Res-UNet详解

图像分割unet系列------Res-UNet详解 1、Res-UNet要解决的问题2、Res-UNet主要网络结构3、引发的思考 Res-UNet发表于2018年&#xff0c;是UNet非常重要的改进版本之一。当然&#xff0c;Res-UNet同样是应用在医学图像分割领域-----视网膜血管分割。 1、Res-UNet要解决的问题 作…

U-Net

(1)使用全卷积神经网络。(全卷积神经网络就是卷积取代了全连接层&#xff0c;全连接层必须固定图像大小而卷积不用&#xff0c;所以这个策略使得&#xff0c;你可以输入任意尺寸的图片&#xff0c;而且输出也是图片&#xff0c;所以这是一个端到端的网络。 整个网络有23层卷积层…

Pytorch实战系列(一)——CNN之UNet代码解析

目录 1.UNet整体结构理解 1.1 UNet结构拆解 1.1.1 卷积层主体&#xff1a;两次卷积操作 1.1.2 左部分每一层&#xff1a;下采样卷积层 1.1.3 右部分每一层&#xff1a;上采样中部分跳跃连接卷积层 1.1.4 输入层和输出层 1.2 UNet结构融合 2.UNet Pytorch代码理解 2.1 …

快速理解Unet的网络结构

Unet 前言FCNUnet 前言 U-Net和FCN非常的相似&#xff0c;U-Net比FCN稍晚提出来&#xff0c;但都发表在2015年&#xff0c;和FCN相比&#xff0c;U-Net的第一个特点是完全对称&#xff0c;也就是左边和右边是很类似的&#xff0c;而FCN的decoder相对简单&#xff0c;只用了一个…

Unet网络解析

1 Unet网络概述 论文名称&#xff1a;U-Net: Convolutional Networks for Biomedical Image Segmentation 发表会议及时间 &#xff1a;MICCA ( 国际医学图像计算和 计算机辅 助干预会 议 ) 2 0 1 5 Unet提出的初衷是为了解决医学图像分割的问题。 Unet网络非常的简单&…

分割网络模型(FCN、Unet、Unet++、SegNet、RefineNet)

1、FCN https://blog.csdn.net/bestrivern/article/details/89523329《Fully Convolutional Networks for Semantic Segmentation》https://arxiv.org/abs/1411.4038 FCN是不含全连接层的全卷积网络&#xff0c;对图像进行像素级的分类&#xff0c;解决了图像的语义分割问题&a…

UNet网络解读

UNet解读 UNet论文UNet的简介代码解读DoubleConv模块Down模块Up模块OutConv模块 整个UNet参考资料 UNet论文 UNet论文地址 UNet的简介 UNet是一个对称的网络结构&#xff0c;左侧为下采样&#xff0c;右侧为上采样&#xff1b;下采样为encoder&#xff0c;上采样为decoder;四…

UNet网络

UNet 本博客主要对UNet网络进行讲解&#xff0c;以下为文章目录&#xff1a; UNet 原论文讲解网络结构数据集介绍评价指标损失计算代码 本文参考资料如下&#xff1a; UNet原论文 https://arxiv.org/pdf/1505.04597.pdfU-Net网络结构讲解(语义分割) https://www.bilibili.c…

U-Net网络详解

U-Net: Convolutional Networks for Biomedical Image Segmentation 原文地址&#xff1a;https://zhuanlan.zhihu.com/p/43927696 前言 U-Net是比较早的使用全卷积网络进行语义分割的算法之一&#xff0c;论文中使用包含压缩路径和扩展路径的对称U形结构在当时非常具有创新…

U-Net网络

U-Net普遍应用在生物医学影像领域&#xff0c;其在架构设计和其他利用卷积神经网络基于像素的图像分割方面更成功&#xff0c;它甚至对有限数据集的图像更有效。U-Net的命名源自它的结构&#xff0c;它的网络结构可视化的结果很像一个字母U。 U-NET网络性能机制 U-Net 融合了 …

【Unet系列】Unet Unet++

文章目录 U-net概述细节部分1、结构的解析2、一些小点 result Unet概述细节部分resultsummary U-net U-Net是一篇基本结构非常好的论文&#xff0c;主要是针对生物医学图片的分割&#xff0c;而且&#xff0c;在今后的许多对医学图像的分割网络中&#xff0c;很大一部分会采取…

图像分割UNet系列------UNet详解

图像分割unet系列------UNet详解 1、UNet网络结构2、UNet网络结构高性能的原因分析3、医学图像使用UNet网络结构 UNet最早发表在2015的MICCAI上&#xff0c;到2020年中旬的引用量已经超过了9700多次&#xff0c;估计现在都过万了&#xff0c;从这方面看足以见得其影响力。当然&…

UNet、UNet++、UNet3+系列

一、unet 简介 继承FCN的思想&#xff0c;继续进行改进。但是相对于FCN&#xff0c;有几个改变的地方&#xff0c;U-Net是完全对称的&#xff0c;且对解码器&#xff08;应该自Hinton提出编码器、解码器的概念来&#xff0c;即将图像->高语义feature map的过程看成编码器&…

unet网络详解

Unet 参考文献&#xff1a;U-Net: Convolutional Networks for Biomedical Image Segmentation作者&#xff1a;Olaf Ronneberger, Philipp Fischer, and Thomas Brox 什么是Unet模型 Unet是一个优秀的语义分割模型&#xff0c;其主要执行过程与其它语义分割模型类似。与CNN…

Unet相关介绍

老师的bloghttps://zhuanlan.zhihu.com/p/370931792。写的比我这个好&#xff0c;233 Unet是在Fcn基础上提出的一种应用于医学影响的分割网络。医学影像的特点是1、数据集小。2、单张图片大。 由于以上医疗影像的特点&#xff0c;我们无法直接用Fcn进行分割学习。一个德国团队…