前端【7】javascript-dom操作

 

目录

DOM 加载与脚本执行的时序问题

1. 将 <script> 标签放到 HTML 末尾

2.使用 defer 属性 

3. 使用 window.onload 

一、获取元素

1、getElementById

2、getElementsByClassName

3、getElementsByTagName

4、querySelector和querySelectorALL

5、对象的属性关系查找

二、修改元素

1、修改内容

2、修改属性

3、修改样式

三、添加元素

四、删除元素


DOM(文档对象模型)操作全称document object model,是指在浏览器中通过 JavaScript 动态修改、添加、删除和获取 HTML 元素的内容和结构。DOM 是浏览器对网页的内部表示,它把网页的每个元素视为一个对象,可以通过 JavaScript 访问和操作这些对象。这样就能在js里面用编程的方式对html里面的元素做处理了

DOM 加载与脚本执行的时序问题

        当 HTML 中需要操作的标签在 <script> 标签后面,导致 JavaScript 无法找到尚未生成的 DOM 元素时,可以通过以下三种方式解决问题:【否则会显示null】

1. 将 <script> 标签放到 HTML 末尾

<!DOCTYPE html>
<html>
<head><title>解决 DOM 加载问题</title>
</head>
<body><div id="example">示例内容</div><script src="js/dom操作.js"></script>
</body>
</html>

2.使用 defer 属性 

为外部 JavaScript 文件添加 defer 属性。defer 使脚本的执行延迟到 HTML 解析完成后,因此适合处理 DOM 尚未生成的问题。

<!DOCTYPE html>
<html>
<head><title>解决 DOM 加载问题</title><script src="js/dom操作.js" defer></script>
</head>
<body><div id="example">示例内容</div>
</body>
</html>

3. 使用 window.onload 

        通过 window.onload 确保脚本在页面内容加载完成后再执行。这种方式对内嵌和外部脚本都有效。

<!DOCTYPE html>
<html>
<head><title>解决 DOM 加载问题</title><script>window.onload = function() {const div = document.getElementById('example');div.innerText = '内容已加载';};</script>
</head>
<body><div id="example">示例内容</div>
</body>
</html>

下面是对dom常见四种操作的学习: 

一、获取元素

1、getElementById

通过id获取符合条件的第一个对象,因此id值最好不重复设置,可以通过 来访问其具有的属性。

var obj1 = document.getElementById('first')
console.log(obj1)

         这样我们就获取到对象obj1了,进而可对其进行我们想要的操作,这里举例点击obj1对象的背景颜色随机改变:

//进行操作-
obj1.onclick = function (){var color = '';  // 初始化颜色变量,用于存储随机生成的颜色// 随机循环生成6个十六进制数(0-15)for(var i = 0; i < 6; i++) {var num = Math.round(Math.random() * 15);  // 生成0到15之间的随机数// 如果随机数是大于9的值,则转换为对应的十六进制字符if(num == 10) num = 'a';  // 10转为'a'if(num == 11) num = 'b';  // 11转为'b'if(num == 12) num = 'c';  // 12转为'c'if(num == 13) num = 'd';  // 13转为'd'if(num == 14) num = 'e';  // 14转为'e'if(num == 15) num = 'f';  // 15转为'f'// 将生成的十六进制数字符添加到color变量中color += num;}console.log(color);  // 输出生成的颜色代码// 设置页面的背景色为随机生成的颜色obj1.style.background = "#" + color
}

2、getElementsByClassName

根据class值查找,找到所有符合条件的对象组成的数组,注意访问的时候需要用下标

var arr = document.getElementsByClassName("aaa")

 对其进行操作:鼠标点击第i个对象时触发弹框

for(var i=0;i<arr.length;i++) {arr[i].onclick =function()
{alert(1)//鼠标点击第i个对象时触发弹框
}
}

 

操作2:随机改变颜色,这里注意this的使用 ----绑定事件和执行事件不在同一时刻

for(var j=0 ;j<arr.length; j++) {arr[j].onclick = function (){  var color = '';  // 初始化颜色变量,用于存储随机生成的颜色// 随机循环生成6个十六进制数(0-15)for(var i = 0; i < 6; i++) {var num = Math.round(Math.random() * 15);  // 生成0到15之间的随机数// 如果随机数是大于9的值,则转换为对应的十六进制字符if(num == 10) num = 'a';  // 10转为'a'if(num == 11) num = 'b';  // 11转为'b'if(num == 12) num = 'c';  // 12转为'c'if(num == 13) num = 'd';  // 13转为'd'if(num == 14) num = 'e';  // 14转为'e'if(num == 15) num = 'f';  // 15转为'f// 将生成的十六进制数字符添加到color变量中color += num;}// 设置当前点击元素的背景色为随机生成的颜色this.style.background = "#" + color;}
}

 最后为什么不能用arr[j],而是this?
        在 for 循环中,先给每个元素绑定onclick,function内部不执行,触发事件时j已经循环完了,j已经为最后一个元素索引了
        所以arr[j] 永远指向最后一个元素,这样即使点击了其他元素,也会应用到最后一个元素上。而this 会指向触发该事件的 DOM 元素

3、getElementsByTagName

        根据元素名称查找:找到所有符合条件的对象组成的数组

var arr = document.getElementsByTagName("div")

4、querySelector和querySelectorALL

        根据元素选择器querySelector查找,获取符合条件的第一个对象

document.querySelector('.aa')//和css选择器一样

根据元素选择器querySelectorALL查找,获取符合条件的所有对象组成的数组 

document.querySelectorAll('.aa')

5、对象的属性关系查找

  • Node: DOM 中所有的节点类型(元素、文本、注释等)都继承自 Node 接口。
    • Node 包含 text 属性,表示文本内容(如文本节点)。
  • Element: 仅表示 HTML 或 XML 元素,不包括文本或注释节点。
    • Element 不显示 text 属性,而是专注于元素特性。

找父亲 parentNode   parentElement

找孩子 childNodes  children

第一个孩子 firstChild firstElementChild

最后一个孩子 lastChild  lastElementChild

上一个元素 previousSibling  previousElementSibling

下一个元素  nextSibling nextElementSibling

console.log(obj.parentNode)
console.log(obj.parentElement)console.log(obj.childNodes)
console.log(obj.children)console.log(obj.firstChild)
console.log(obj.firstElementChild)console.log(obj.lastChild)
console.log(obj.lastElementChild)console.log(obj.previousSibling)
console.log(obj.previousElementSibling)console.log(obj.nextSibling)
console.log(obj.nextElementSibling)

二、修改元素

首先要获取元素

var bb = document.getElementById("bb");
var obj2 = document.getElementById("a0");

1、修改内容

innerText 当前修改的内容当作文本来处理
innerHTML 当前修改的内容当作标签来处理
区别与联系
innerText 直接呈现内容
innerHTML会解析标签,然后再呈现
当里面都是文本时(没有标签的话),两个呈现的一样

value 修改input的值(修改 用于收集用户信息的标签)

obj2.innerText =" <h1>新文本</h1>" 
obj2.innerHTML =" <h1>新文本1</h1>"
bb.value = "请输入新文本"

2、修改属性

原生属性 (对象自带的属性) 对象.属性=值

console.log(bb.id);
bb.id = 'cc';
bb.className = "dd";

操作自定义属性 

获取自定义属性:getAttribute 方法,

console.log(obj2.getAttribute("xxxx")); // 打印出 99

设置自定义属性:setAttribute 方法,如果属性 eat 不存在,则会创建该属性并赋值为 "apple"

obj2.setAttribute("eat", "apple");

3、修改样式

通过单独设置样式属性  或  使用 cssText 一次性设置多个样式。

bb.style.background = 'red'; // 设置背景色为红色
bb.style.color = 'blue'; // 设置文字颜色为蓝色
bb.style.fontSize = '50px'; // 设置字体大小为 50px

等同于:语法与 CSS 写法相同,属性之间用分号分隔。 

obj2.style.cssText = "background:red;color:blue;font-size:80px";

三、添加元素

复制一个元素和重新创建元素两个途径添加元素。

createElement() 创建新元素:

语法:document.createElement(tagName)

var newNode = document.createElement("h1"); // 创建一个新的 h1 元素
newNode.innerText = "新添加的元素"; // 设置新元素的文本内容
newNode.className = "xixi"; // 添加 class 名
newNode.style.background = "purple"; // 设置背景色

cloneNode() 复制已有元素:

语法:node.cloneNode(deep)

  • deep 参数:
    • false(浅复制):仅复制元素本身,不复制其子节点。
    • true(深复制):复制元素及其所有子节点。
var oldNode = document.querySelector("ul"); // 查找到要复制的 ul 元素
var newNode2 = oldNode.cloneNode(true); // 深复制 ul 及其子节点

 appendChild() 添加到子元素末尾:将子节点添加到父节点的最后。

obj3.appendChild(newNode); // 将新创建的 h1 元素添加到 obj3 的子节点末尾
obj3.appendChild(newNode2); // 将复制的 ul 元素添加到 obj3

insertBefore() 插入到指定子节点前 :

  • 语法:parentNode.insertBefore(newNode, referenceNode)
  • 在指定的子节点 referenceNode 前插入新节点。
var h4 = document.querySelector("h4"); // 找到需要插入前的子节点
obj3.insertBefore(newNode, h4); // 将 newNode 插入到 h4 之前

replaceChild() 替换子节点 :

  • 语法:parentNode.replaceChild(newNode, oldChild)
  • 用新节点替换指定的子节点。
obj3.replaceChild(newNode, h4); // 用 newNode 替换 h4 元素

四、删除元素

想删除一个元素 就去找它的父级元素,父级元素调用removeChild()


var obj4 = document.getElementById("sec")
var h4 = document.querySelector("h4") //要删除哪个
obj4.removeChild(h4) //元素的父级元素调用remove// h4.parentNode.removeChild(h4)  也可以关系查找    

ref参考资料:

DOM操作指南-CSDN博客

JavaScriptDOM操作详解:获取、创建、修改与事件处理-CSDN博客

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

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

相关文章

python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖

【1】引言 前序学习了使用numpy创建单通道的灰色图像&#xff0c;并对灰色图像的局部进行了颜色更改&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;九&#xff09;用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客 之后又学习了使用numpy创…

【2024年终总结】我与CSDN的一年

&#x1f449;作者主页&#xff1a;心疼你的一切 &#x1f449;作者简介&#xff1a;大家好,我是心疼你的一切。Unity3D领域新星创作者&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6; &#x1f449;记得点赞 &#x1f44d; 收藏 ⭐爱你们&#xff0c;么么哒 文章目录 …

MySQL主从配置

一、 主从原理 MySQL 主从同步是一种数据库复制技术&#xff0c;它通过将主服务器上的数据更改复制到一个或多个从服务器&#xff0c;实现数据的自动同步。主从同步的核心原理是将主服务器上的二进制日志复制到从服务器&#xff0c;并在从服务器上执行这些日志中的操作。 二、主…

【SpringCloud】黑马微服务学习笔记

目录 1. 关于微服务 ?1.1 微服务与单体架构的区别 ?1.2 SpringCloud 技术 2. 学习前准备 ?2.1 环境搭建 ?2.2 熟悉项目 3. 正式拆分 ?3.1 拆分商品功能模块 ?3.2 拆分购物车功能模块 4. 服务调用 ?4.1 介绍 ?4.2 RustTemplate?的使用 4.3 服务治理-注册中…

windows git bash 使用zsh 并集成 oh my zsh

参考了 这篇文章 进行配置&#xff0c;记录了自己的踩坑过程&#xff0c;并增加了 zsh-autosuggestions 插件的集成。 主要步骤&#xff1a; 1. git bash 这个就不说了&#xff0c;自己去网上下&#xff0c;windows 使用git时候 命令行基本都有它。 主要也是用它不方便&…

解决leetcode第3418题机器人可以获得的最大金币数

3418.机器人可以获得的最大金币数 难度&#xff1a;中等 问题描述&#xff1a; 给你一个mxn的网格。一个机器人从网格的左上角(0,0)出发&#xff0c;目标是到达网格的右下角(m-1,n-1)。在任意时刻&#xff0c;机器人只能向右或向下移动。 网格中的每个单元格包含一个值coin…

opengrok_windows_环境搭建

目录 软件列表 软件安装 工程索引 ​编辑 工程部署 问题列表 软件列表 软件名下载地址用途JDKhttps://download.java.net/openjdk/jdk16/ri/openjdk-1636_windows-x64_bin.zipindex 使用java工具tomcathttps://dlcdn.apache.org/tomcat/tomcat-9/v9.0.98/bin/apache-tom…

c++ 与 Matlab 程序的数据比对

文章目录 背景环境数据保存数据加载 背景 ***避免数据精度误差&#xff0c;快速对比变量 *** 环境 c下载 https://github.com/BlueBrain/HighFive 以及hdf5库 在vs 中配置库 数据保存 #include <highfive/highfive.hpp> using namespace HighFive;std::string fil…

【2024 博客之星评选】请继续保持Passion

我尝试复盘自己2024年走的路&#xff0c;希望能给诸君一些借鉴。 文章目录 回头望感想与收获成长与教训今年计划感恩一些体己话 回头望 回望我的2024年&#xff0c;年初拿高绩效&#xff0c;但感觉逐渐被公司一点点剥离出中心&#xff1b;年中一直在学习防患于未然&#xff1b…

unity插件Excel转换Proto插件-ExcelToProtobufferTool

unity插件Excel转换Proto插件-ExcelToProtobufferTool **ExcelToProtobufTool 插件文档****1. 插件概述****2. 默认配置类&#xff1a;DefaultIProtoPathConfig****属性说明** **3. 自定义配置类****定义规则****示例代码** **4. 使用方式****4.1 默认路径****4.2 自定义路径**…

总结 uniapp 上不适配iphone的:new Date 时间、border线条、渐变

1、border样式缺了一边 这是错误样式&#xff1a; 需要添加: border: 1rpx solid #57c7bb; transform: rotateZ(0deg);//加入此代码解决iphone 不适配问题2、时间出现NaN 原因是因为ios中使用new Date 的时候出了问题 解决方案: 1.调整时间格式:将时间格式从"yyyy-MM-d…

【深度学习】Java DL4J 2024年度技术总结

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

快速学习GO语言总结

干货分享&#xff0c;感谢您的阅读&#xff01;备注&#xff1a;本博客将自己初步学习GO的总结进行分享&#xff0c;希望大家通过本博客可以在短时间内快速掌握GO的基本程序编码能力&#xff0c;如有错误请留言指正&#xff0c;谢谢&#xff01; 一、初步了解Go语言 &#xf…

【深度学习】2.视觉问题与得分函数

计算机视觉任务 可以通过神经网络搜索是什么类别的动物。 图像实际就是含有数值的三维矩阵。 像素值从0-255可以表示亮度递增的参数。数字越大&#xff0c;像素点越亮。 最后的3表示三个颜色通道&#xff0c;常见的如JPG、RGB等。 现实场景容易发生各种遮蔽现象。 计算机判断…

本地 AI 模型“不实用”?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【Maui】下拉框的实现,绑定键值对

文章目录 前言一、问题描述二、解决方案三、软件开发&#xff08;源码&#xff09;3.1 创建模型3.2 视图界面3.3 控制器逻辑层 四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架&#xff0c;用于使用 C# 和 XAML 创建本机移动和桌面应用。 使用 .NET MAUI&…

AI守护煤矿安全生产:基于视频智能的煤矿管理系统架构解析

前言 本文我将介绍我和我的团队自主研发设计的一款AI产品的成果展示——“基于视频AI识别技术的煤矿安全生产管理系统”。 这款产品是目前我在创业阶段和几位矿业大学的博士共同从架构设计、开发到交付的全过程中首次在博客频道发布, 我之前一直想写但没有机会来整理这套系统的…

.NET开源的处理分布式事务的解决方案

前言 在分布式系统中&#xff0c;由于各个系统服务之间的独立性和网络通信的不确定性&#xff0c;要确保跨系统的事务操作的最终一致性是一项重大的挑战。今天给大家推荐一个.NET开源的处理分布式事务的解决方案基于 .NET Standard 的 C# 库&#xff1a;CAP。 CAP项目介绍 C…

计算机网络 (52)秘钥分配

一、重要性 在计算机网络中&#xff0c;密钥分配是密钥管理中的一个核心问题。由于密码算法通常是公开的&#xff0c;因此网络的安全性主要依赖于密钥的安全保护。密钥分配的目的是确保密钥在传输过程中不被窃取或篡改&#xff0c;同时确保只有合法的用户才能获得密钥。 二、方…

Open3D计算点云粗糙度(方法一)【2025最新版】

目录 一、Roughness二、代码实现三、结果展示博客长期更新,本文最近更新时间为:2025年1月18日。 一、Roughness 通过菜单栏的Tools > Other > Roughness找到该功能。 这个工具可以估计点云的“粗糙度”。 选择一个或几个点云,然后启动这个工具。 CloudCompare只会询问…