【Java Web学习 | 第12篇】JavaScript(6)DOM


🌈 个人主页: Hygge_Code
🔥 热门专栏:从0开始学习Java | Linux学习| 计算机网络
💫 个人格言: "既然选择了远方,便不顾风雨兼程"

文章目录

DOM操作

什么是DOM?

DOM(Document Object Model,文档对象模型)是浏览器提供的一套专门用来操作网页内容的功能,它允许我们开发网页内容特效和实现用户交互。DOM的核心思想是把网页内容当作对象来处理,而document对象则是网页中最大的对象,所有网页内容都包含在document里面。

DOM树将HTML文档以树状结构直观地表现出来,体现了标签与标签之间的关系。浏览器会根据HTML标签生成对应的JS对象(DOM对象),这些对象包含了标签的所有属性,修改这些对象的属性会自动映射到对应的标签上。

获取DOM对象的方法

获取DOM对象是进行DOM操作的第一步,以下是常用的获取方法:

1. 根据CSS选择器获取

  • 获取匹配的第一个元素

    javascript 复制代码
    // 语法:document.querySelector("CSS选择器")
    const box = document.querySelector(".box1");
    const nav = document.querySelector("#nav");
    const firstLi = document.querySelector(".ull li:first-child");
  • 获取匹配的多个元素

    javascript 复制代码
    // 语法:document.querySelectorAll("CSS选择器")
    const lis = document.querySelectorAll(".ull li");
    // 返回的是伪数组,需要遍历获取每个元素
    for (let i = 0; i < lis.length; i++) {
      console.log(lis[i]);
    }

2. 其他常用获取方法

  • 根据id获取

    javascript 复制代码
    const element = document.getElementById("id");
  • 根据标签名获取

    javascript 复制代码
    const elements = document.getElementsByTagName("tagName");
  • 根据类名获取

    javascript 复制代码
    const elements = document.getElementsByClassName("className");

修改元素内容

要修改标签元素里面的内容,主要有两种方式:

1. innerText属性

innerText属性用于将文本添加或更新到任意标签位置,只显示纯文本,不解析HTML标签

javascript 复制代码
const change1 = document.querySelector(".change1");
console.log(change1.innerText); // 获取文字内容
change1.innerText = "<strong>成功完成了文字内容的修改1</strong>";
// 结果会显示完整的字符串,不会解析<strong>标签

2. innerHTML属性

innerHTML属性同样用于将文本添加或更新到任意标签位置,但会解析HTML标签,多标签时建议使用模板字符串。

javascript 复制代码
const change2 = document.querySelector(".change2");
change2.innerHTML = "<strong>成功完成了文字内容的修改2</strong>";
// 结果会显示加粗的文字,<strong>标签会被解析

修改元素属性

1. 操作元素常用属性

如href、title、src等属性,可以直接通过点语法操作:

javascript 复制代码
const img = document.querySelector(".img1");
img.src = "../HTML+CSS学习/picture/巫8.jpg"; // 修改已有属性
img.title = "除却巫山不是云"; // 添加新属性

2. 操作元素样式属性

(1)通过style属性操作CSS
javascript 复制代码
const div1 = document.querySelector(".div1");
div1.style.width = "300px";
// 注意:有-连接符的属性需要转换为小驼峰命名法
div1.style.backgroundColor = "blue";
div1.style.border = "2px solid red";
(2)通过className操作CSS

当需要修改的样式较多时,使用className可以简化操作:

javascript 复制代码
const div2 = document.querySelector(".div2");
// 注意:会覆盖原有类名,如需保留需一并写入
div2.className = "div2 div2Change";
(3)通过classList操作类控制CSS

classList提供了更灵活的类操作方式,不会覆盖原有类名:

javascript 复制代码
const div3 = document.querySelector(".div3");
div3.classList.add("active"); // 追加类
div3.classList.remove("div3"); // 删除类
div3.classList.toggle("active"); // 切换类(有则删,无则加)

3. 操作表单属性

表单元素有一些特殊属性需要注意:

javascript 复制代码
const input = document.querySelector("input");
// 获取表单值用value属性,而不是innerText
console.log(input.value);
input.value = "新值"; // 修改表单值
input.type = "password"; // 改变输入框类型

// 布尔值属性(如checked、disabled)
const checkbox = document.querySelector("#checkbox1");
checkbox.checked = true; // 选中复选框
checkbox.disabled = true; // 禁用复选框

4. 自定义属性

HTML5推出了专门的data-*自定义属性,其中 dataset 是 DOM 元素自带的一个属性,它是一个对象,专门用来存储当前元素上所有 data-* 自定义属性的键值对

html 复制代码
<div data-id="1" data-spm="不知道" class="div11">1</div>
javascript 复制代码
const customDiv = document.querySelector(".div11");
console.log(customDiv.dataset); // 所有data-*属性的集合
console.log(customDiv.dataset.id); // 获取data-id的值
console.log(customDiv.dataset.spm); // 获取data-spm的值

定时器-间歇函数

定时器用于每隔一段时间自动执行一段代码,如实现倒计时等功能。

1. 开启定时器

javascript 复制代码
// 语法:setInterval(函数, 间隔时间)
// 匿名函数形式
let timeId1 = setInterval(function() {
  console.log("林七夜");
}, 1000);

// 命名函数形式
function fn() {
  console.log("一秒执行一次");
}
let timeId2 = setInterval(fn, 1000); // 注意函数名不加括号

2. 关闭定时器

javascript 复制代码
// 语法:clearInterval(定时器ID)
clearInterval(timeId1);

总结

DOM操作是前端开发的核心技能之一,通过本文介绍的方法,我们可以:

  1. 灵活获取各种DOM元素
  2. 修改元素内容和属性
  3. 操作元素样式
  4. 处理表单元素
  5. 使用定时器实现周期性操作

如果我的内容对你有帮助,请 点赞 , 评论 , 收藏 。创作不易,大家的支持就是我坚持下去的动力!

相关推荐
婷婷婷婷4 分钟前
表格组件封装详解(含完整代码)
前端
前端Hardy5 分钟前
祝大家 2026 年新年快乐,代码无 bug,需求一次过
javascript·css·html
晴虹6 分钟前
lecen:一个更好的开源可视化系统搭建项目--页面设计器(表单设计器)--全低代码|所见即所得|利用可视化设计器构建你的应用系统-做一个懂你的人
前端·后端·低代码
正远数智7 分钟前
深度解析:SRM系统如何赋能采购库存协同
java·lowcode
青岛少儿编程-王老师10 分钟前
CCF编程能力等级认证GESP—C++1级—20251227
java·c++·算法
小皮虾10 分钟前
这应该是前端转后端最简单的办法了,不买服务器、不配 Nginx,也能写服务端接口,腾讯云云函数全栈实践
前端·javascript·全栈
码途进化论11 分钟前
Vue3 防重复点击指令 - clickOnce
前端·javascript·vue.js
神秘的猪头13 分钟前
🎣 拒绝面条代码!手把手带你用自定义 Hooks 重构 React 世界
javascript·react.js
小二·16 分钟前
从零手写俄罗斯方块(Tetris)——前端工程化实战与性能优化
前端·性能优化
xiaoxue..28 分钟前
高频事件的“冷静剂” 闭包的实用场景:防抖与节流
前端·javascript·面试·html·编程思想