24-原生 JavaScript 操作 DOM:从创建元素到事件处理

devtools/2024/11/20 15:52:43/
htmledit_views">

笔记+分享

在现代 Web 开发中,我们通常会使用各种框架和库(如 React、Vue.js)来简化 DOM 操作,但在某些情况下,理解和使用原生 JavaScript(也称为 Vanilla JS)操作 DOM 仍然是非常重要的技能。这不仅有助于你理解 Web 的核心原理,还能让你在需要优化性能、减少依赖时拥有更多控制力。

本文将详细介绍如何使用原生 JavaScript 操作 DOM,包括创建元素、修改内容、添加事件处理程序等基本操作。


目录

  1. 什么是 DOM?
  2. 使用原生 JavaScript 操作 DOM
    1. 创建并插入元素
    2. 为元素添加属性与样式
    3. 查找页面元素
    4. 事件处理:监听与移除
    5. 修改元素的内容
    6. 删除元素
    7. 动态创建多个元素
    8. 操作表单元素的值
    9. 防止表单的默认行为
  3. 总结

什么是 DOM?

DOM(Document Object Model,文档对象模型)是浏览器对 HTML 或 XML 文档的编程接口,它允许开发者通过编程来操作文档的结构、样式和内容。在 JavaScript 中,DOM 提供了许多方法来动态地添加、修改和删除页面中的元素和内容。

使用原生 JavaScript 操作 DOM

接下来我们将分步骤介绍如何使用原生 JavaScript 操作页面的 DOM。

1. 创建并插入元素

使用 document.createElement() 方法可以动态创建一个新的 HTML 元素,随后我们可以通过 appendChild() 方法将该元素添加到页面中。

// 创建一个 <div> 元素
let newDiv = document.createElement('div');// 为 <div> 添加文本内容
newDiv.textContent = '这是一个新创建的 div 元素';// 将该元素添加到 body 中
document.body.appendChild(newDiv);

在上面的代码中,newDiv 是我们创建的元素。我们通过 textContent 为元素添加文本内容,最后用 appendChild() 方法将其添加到页面的 body 中。

2. 为元素添加属性与样式

在创建元素后,你可能需要为它设置一些属性或样式。这可以通过直接设置元素的属性或使用 style 对象来实现。

// 设置元素的 id 和类名
newDiv.id = 'myDiv';
newDiv.className = 'my-class';// 为元素添加样式
newDiv.style.color = 'white';
newDiv.style.backgroundColor = 'blue';
newDiv.style.padding = '10px';

3. 查找页面元素

你可以使用多种方法来查找页面中的元素,例如通过 getElementById()getElementsByClassName() 或 querySelector()

// 根据 id 查找元素
let elementById = document.getElementById('myDiv');// 根据类名查找多个元素
let elementsByClass = document.getElementsByClassName('my-class');// 使用 querySelector 查找第一个匹配的元素
let firstDiv = document.querySelector('div');// 使用 querySelectorAll 查找所有匹配的元素
let allDivs = document.querySelectorAll('div');

4. 事件处理:监听与移除

事件处理是 Web 开发中不可或缺的部分。你可以使用 addEventListener() 方法为元素添加事件监听器,如 clickmouseover等。

// 为元素添加点击事件
newDiv.addEventListener('click', function() {alert('你点击了新创建的 div 元素!');
});

如果需要移除事件监听,可以使用 removeEventListener() 方法:

function handleClick() {alert('你点击了该元素');
}// 添加事件
newDiv.addEventListener('click', handleClick);// 移除事件
newDiv.removeEventListener('click', handleClick);

5. 修改元素的内容

你可以动态修改元素的文本或 HTML 内容:

// 修改文本内容
newDiv.textContent = '这是修改后的文本内容';// 修改 HTML 内容
newDiv.innerHTML = '<strong>新的内容</strong>';

textContent 会修改元素的纯文本,而 innerHTML 则允许你插入 HTML 标签。

6. 删除元素

通过 remove() 方法,你可以从页面中删除一个元素:

// 删除元素
newDiv.remove();

7. 动态创建多个元素

如果你需要批量创建多个元素,可以使用循环来生成这些元素,并依次添加到页面中。例如,我们创建一个包含 3 个列表项的 ul列表:

let ul = document.createElement('ul');for (let i = 1; i <= 3; i++) {let li = document.createElement('li');li.textContent = `第 ${i} 个列表项`;ul.appendChild(li);
}document.body.appendChild(ul);

8. 操作表单元素的值

你可以轻松获取或修改表单元素的值,例如 input 或 textarea

// 获取 input 的值
let inputValue = document.querySelector('input').value;// 修改 input 的值
document.querySelector('input').value = '新的输入值';

9. 防止表单的默认行为

在处理表单提交时,通常你希望阻止默认的提交行为,例如在客户端验证之前防止表单被提交:

document.querySelector('form').addEventListener('submit', function(event) {event.preventDefault(); // 阻止默认提交行为alert('表单提交已被阻止');
});

总结

通过本文的学习,我们掌握了使用原生 JavaScript 操作 DOM 的基础知识,包括创建和插入元素、修改属性和内容、事件处理、动态生成列表等。掌握这些基础技能对理解html" title=前端>前端开发非常重要,即使在使用框架时,它们也能帮助你编写更高效的代码。

虽然现代html" title=前端>前端框架使得这些操作更加方便,但在某些场景下(如性能优化或开发简易页面时),使用原生 JavaScript 操作 DOM 依然是很有必要的。


http://www.ppmy.cn/devtools/135516.html

相关文章

SQL 之连接查询(左连接和右连接的区别)

在SQL中&#xff0c;连接查询用于将来自两个或多个表的数据组合起来。左连接&#xff08;LEFT JOIN&#xff09;和右连接&#xff08;RIGHT JOIN&#xff09;是连接查询的两种类型&#xff0c;它们在处理表之间的关系时有所不同。 左连接&#xff08;LEFT JOIN&#xff09; 左…

Dubbo源码解析-服务注册(五)

一、服务注册 当确定好了最终的服务配置后&#xff0c;Dubbo就会根据这些配置信息生成对应的服务URL&#xff0c;比如&#xff1a; dubbo://192.168.65.221:20880/org.apache.dubbo.springboot.demo.DemoService? applicationdubbo-springboot-demo-provider&timeout300…

深度学习中的mAP

在深度学习中&#xff0c;mAP是指平均精度均值(mean Average Precision)&#xff0c;它是深度学习中评价模型好坏的一种指标(metric)&#xff0c;特别是在目标检测中。 精确率和召回率的概念&#xff1a; (1).精确率(Precision)&#xff1a;预测阳性结果中实际正确的比例(TP / …

【Java】Linux、Mac、Windows 安装 Oracle JDK

一、Linux 环境安装JDK 1、下载 根据实际需求&#xff0c;在 Oracle 官网 上下载某版本JDK&#xff08;如 jdk-8u341-linux-x64.tar.gz&#xff09;&#xff0c;再通过文件传输工具&#xff08;如 Finalshell、FileZilla 等&#xff09;丢到服务器上。 2、安装 # 查看是否安…

计算光纤色散带来的相位移动 matlab

需要注意的地方 1.以下内容纯属个人理解&#xff0c;很有可能不准确&#xff0c;请大家仅做参考 2.光速不要直接用3e8 m/s&#xff0c;需要用精确的2.9979.... 3.光的频率无论在真空还是光纤(介质)都是不变的&#xff0c;是固有属性&#xff0c;但是波长lambdac/f在不同的介…

Scala 中迭代器的duplicate方法,toList方法,zip方法

duplicate方法&#xff1a; 复制迭代器 duplicate 返回值是一个元组&#xff0c;有两个数据源一样的&#xff0c;独立的迭代器 迭代器特点&#xff1a;不能回头val list8List("A","B","C")val (it8,it9)list8.iterator.duplicatewhile (it8.has…

opencv kdtree pcl kdtree 效率对比

由于项目中以一个环节需要使用kdtree ,对性能要求比较严苛&#xff0c;所以看看那个kdtree效率高一些。对比了opencv和pcl。 #include <array> #include <deque> #include <fstream> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp…

二本学院非科班天崩开局,如何逆天改命拿下大厂后端

天崩开局&#xff0c;如何破局自救 2021 年高考结束&#xff0c;我当时的第一志愿是计算机科学与技术专业&#xff0c;但是我被录取到了河南工程学院的高分子材料与工程专业。 我去咨询计算机相关行业的从业者&#xff0c;以及多方面网络搜集相关信息之后得到了一个很现实的消…