分享10个前端开发者需要掌握的DOM技巧

5229b577b4adc50dab9c038a54201906.jpeg

Web开发不断发展,掌握最新的趋势和最佳实践对每位开发者来说都至关重要。Web开发的最重要方面之一就是使用文档对象模型(DOM)。在本文中,我们将探讨10个必须掌握的DOM技巧和技巧,配有代码示例,这将帮助您成为更高效、更有效的开发者。

1、掌握DOM操作的基础知识

在深入学习高级DOM技巧之前,了解基础知识是至关重要的。熟悉核心DOM概念,如选择元素、修改属性和遍历DOM树。这将使您更容易理解和实现更高级的技术。

// 通过ID选择元素
const element = document.getElementById('myElement');

// 修改属性
element.setAttribute('data-custom', 'value');

// 修改样式属性以将颜色设置为红色
element.style.color = 'red';

// 遍历DOM树
const parent = element.parentNode;
const children = element.childNodes;

2、使用querySelector和querySelectorAll方法

querySelector和querySelectorAll方法是选择DOM元素的强大工具。它们允许您使用CSS选择器来定位元素,从而更轻松地查找和操作HTML文档中的特定元素。

// 选择单个元素
const element = document.querySelector('.myClass');

// 选择多个元素
const elements = document.querySelectorAll('.myClass');

3、利用事件委托

事件委托是一种技术,它允许您通过将单个事件监听器附加到父元素来更有效地处理事件。这减少了所需的事件监听器数量,并提高了性能,特别是在有许多元素的大型应用程序中。

document.addEventListener(‘click’, function(event) {
 if (event.target.matches(‘.myClass’)) {
 console.log(‘Element clicked:’, event.target);
 }
});

4、利用classList API

classList API提供了一种方便的方法来在DOM元素上添加、删除和切换CSS类。这使得更容易地操作元素的外观和行为,而无需依赖内联样式或繁琐的字符串操作。

// 选择一个元素
const element = document.querySelector('.myClass');

// 添加一个类
element.classList.add('newClass');

// 删除一个类
element.classList.remove('myClass');

// 切换一个类
element.classList.toggle('active');

5、使用createElement和appendChild方法创建动态内容

在创建动态内容时,使用createElement和appendChild方法生成新的DOM元素并将它们添加到DOM树中。这种方法比使用innerHTML或其他基于字符串的方法更高效且更易于维护。

const newElement = document.createElement(‘div’);
newElement.textContent = ‘Hello, world!’;
document.body.appendChild(newElement);

6、优化DOM访问和操作

访问和操作DOM可能会很慢,特别是在大型应用程序中。为了提高性能,请通过将元素缓存到变量中最小化DOM访问,并使用文档片段或requestAnimationFrame API批量更新。

const elements = document.querySelectorAll('.myClass');
const fragment = document.createDocumentFragment();
elements.forEach(element => {
 const newElement = document.createElement('span');
 newElement.textContent = 'Updated';
 fragment.appendChild(newElement);
});
document.body.appendChild(fragment);

7、理解节点和元素之间的区别

在DOM中,节点是表示文档树的一部分的通用对象,而元素是表示HTML标签的特定类型的节点。理解这两个概念之间的区别对于有效地使用DOM至关重要。

const element = document.querySelector('.myClass');
const node = element.firstChild;
console.log('Element:', element);
console.log('Node:', node);

8、使用自定义数据属性

自定义数据属性允许您在DOM元素上存储额外的信息,而不会影响它们的表现或行为。这对于存储状态、配置或其他需要在JavaScript代码中访问的元数据非常有用。

<div data-custom="value">My element</div>
const element = document.querySelector('[data-custom]');
const customValue = element.getAttribute('data-custom');
console.log('Custom value:', customValue);

9、了解Shadow DOM

Shadow DOM是一种强大的功能,允许您在元素内部创建封装的DOM树。这对于创建具有隔离样式和行为的可重用组件非常有用,使您的代码更加模块化和易于维护。

class MyComponent extends HTMLElement {
 constructor() {
 super();
 const shadowRoot = this.attachShadow({ mode: ‘open’ });
 shadowRoot.innerHTML = `
 <style>
 span { color: red; }
 </style>
 <span>Hello, world!</span>
 `;
 }
}
customElements.define('my-component', MyComponent);

这段代码是一个使用Shadow DOM创建自定义Web组件的示例。这个组件的名称是my-component,它继承自HTMLElement类。

在MyComponent的构造函数中,调用了父类HTMLElement的构造函数,并在其中通过attachShadow()方法创建了一个Shadow DOM。attachShadow()方法接受一个配置对象,{ mode: 'open' }指定了Shadow DOM的模式为“open”,表示可以从外部访问Shadow DOM。

接下来,使用模板字符串在Shadow DOM中定义了样式和内容。在样式中,指定了span元素的文本颜色为红色。在内容中,创建了一个span元素并显示文本“Hello, world!”。

最后,通过customElements.define()方法定义了这个自定义组件的名称和类。在这个例子中,名称为my-component,类为MyComponent。

您可以在HTML文档中使用<my-component>标签来调用这个自定义组件。例如:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>My Component Demo</title>
</head>
<body>
  <my-component></my-component>
  <script src="my-component.js"></script>
</body>
</html>

在上面的示例中,通过<my-component>标签调用了自定义组件,它将显示“Hello, world!”文本。需要注意的是,在使用自定义组件之前,需要先将定义组件的JavaScript文件(如上例中的my-component.js)引入到HTML文档中。

10、熟悉<template>标签

<template>标签是HTML5的一个强大功能,它允许您定义可重用的HTML标记块。在处理动态内容或创建自定义组件时,这尤其有用。通过使用<template>标签,您可以为内容定义模板,然后根据需要克隆并插入到DOM中。这种方法比使用基于字符串的方法生成HTML更高效和可维护。

<template id=”myTemplate”>
 <div class="myClass">Hello, world!</div>
</template>
const template = document.getElementById('myTemplate');
const content = template.content.cloneNode(true);
document.body.appendChild(content);

结束

掌握DOM是每个Web开发人员都必须具备的关键技能。通过遵循这10个技巧和技巧,配有代码示例,您将成为更高效、更有效和更有知识的开发者。保持好奇心,持续学习,并不要忘记与Web开发社区中的其他人分享您的知识。祝您编码愉快!

在文章结尾,我想提醒您,文章的创作不易,如果您喜欢我的分享,请别忘了点赞和转发,让更多有需要的人看到。同时,如果您想获取更多前端技术的知识,欢迎关注「前端达人」,您的支持将是我分享最大的动力。我会持续输出更多内容,敬请期待。

原文:
https://medium.com/dev-genius/title-10-must-know-dom-tips-and-tricks-for-every-developer-in-2023-ae2d0c09acbb

作者:Erik Newland

非直接翻译,有自行改编和添加部分,翻译水平有限,难免有疏漏,欢迎指正

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kotlin 是后端开发的未来

Kotlin 是后端开发的未来 严格类型、命名参数、多范式语言 您今天遇到的每个后端开发人员都会说他们使用 JavaScript、Python、PHP 或 Ruby 编写代码。近年来&#xff0c;您会遇到一小部分人转而使用 Kotlin 作为他们创建 Web 服务器的语言选择。由于我在学习Ktor&#xff0c;所…

项目部署---shell脚本自动部署项目

通过shell脚本自动部署项目 操作步骤&#xff1a; 在Linux中安装Git在Linux中安装maven编写shell脚本&#xff08;拉取代码、编译、打包、启动&#xff09;为用户授予执行shell脚本的权限执行shell脚本 执行过程&#xff1a;Linux服务器&#xff08;编译、打包、启动&#x…

巧用千寻位置GNSS软件|点测量状态栏与工具栏全解析

众所周知&#xff0c;点测量是提供点位坐标多种模式测量、测量模式切换、测量数据简单成图等多种方式的点位地理信息测量功能。下面我们来解析在千寻位置GNSS软件中点测量功能下的各状态栏和工具栏。图5.1-1点击【测量】->【点测量】&#xff0c;如图5.1-1 所示&#xff0c;…

面向削峰填谷的电动汽车多目标优化调度策略

说明书 MATLAB代码&#xff1a;面向削峰填谷的电动汽车多目标优化调度策略 关键词&#xff1a;电动汽车 削峰填谷 多目标 充放电优化 参考文档&#xff1a;店主自己整理的说明文档&#xff0c;公式、约束、数据齐全&#xff0c;可联系我查看 仿真平台&#xff1a;MATLAB YA…

Android 设置背景颜色透明度

前言 本章是对设计给出的颜色做透明度的处理 原因 一般情况下我们是不需要做处理的&#xff0c;那为什么又需要我们做透明度呢&#xff0c;原因就是咱们的设计小哥哥、小姐姐们没有自己做处理&#xff0c;如果处理了的话&#xff0c;我们直接使用设计标注的AHEX颜色就行&a…

Vue+echart 图根据网页自适应resize缩放

const chartBar null;data{return {chartBar :null} }//关键代码activated() {// 由于给echart添加了resize事件, 在组件激活时需要重新resize绘画一次, 否则出现空白bug// if (this.chartBar) {this.chartBar.resize();// }},chartBar echarts.init(document.getElementBy…

信息安全和网络安全

安全五要素&#xff1a; 机密 完整 并且能判断数据是否被篡改 可用 可控 可审查性 对于网络及网络交易&#xff0c;信息安全的基本需求是&#xff1a; 机密性完整性不可抵赖性 计算机系统安全保护的五个等级&#xff1a; 注释&#xff1a;其中的安全标记保护级是属于强…

【Spring】—Spring中Bean的配置、作用域

一、Bean的配置 Spring用于生产和管理Spring容器中的Bean&#xff0c;需要开发者对Spring的配置文件进行配置。在实际开发中&#xff0c;最常采用XML格式的配置方式&#xff0c;即通过XML文件来注册并管理Bean之间的依赖关系。 在Spring中&#xff0c;XML配置文件的根元素是…

深度学习在表面缺陷检测领域的应用

随着工业对原材料质量要求的提高&#xff0c;圆钢表面缺陷检测已成为工业生产的重要组成部分。 表面缺陷检测技术主要分为两类&#xff0c;即传统的无损检测方法和机器视觉检测方法&#xff0c;后者因其实时性和高精度而得到更广泛的应用。 作为现代工业生产的重要原材料&…

分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测

分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测 目录分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测分类效果基本介绍模型描述程序设计参考资料分类效果 基本介绍 MATLAB实现CNN-BiLSTM-Attention多输入分类预测&#xff0c;CNN-BiLSTM结合注意力机制多输…

【教程】解决VSCode中Python第三方库无法自动补全

背景 学习ROS的时候&#xff0c;发现ROS的第三方库无法自动补齐 解决过程 查询到的一个解决方法是&#xff0c;禁用Pylance扩展 禁用之后第三方库可以自动补齐了但是原来自带库的语法高亮消失了此解决方法不是上策 解决方法 打开 .vscode 文件夹下面的 setting.json 文件 …

QN88封装国产FPGA

QN88GW1N-9管脚名GW2A-18管脚名AL3S10EG4S201VCCVCCIO_L1_1VCC_12VSSVSSIO_L2_1IO_L1_13IOL2AVCCO7IO_L3_1,MOSI,D1IO_L2_14IOL5A/JTAGSEL_N/LPLL_T_inIOL7A/LPLL1_T_inIO_L4_1IO_L1N_15IOL11A/TMSIOR25B/TMSIO_L5_1,SPICSNIO_L1P_16IOL11B/TCKIOR26A/TCKINITNGND7IOL12B/TDIIO…

常见漏洞扫描工具AWVS、AppScan、Nessus的使用

HVV笔记——常见漏洞扫描工具AWVS、AppScan、Nessus的使用1 AWVS1.1 安装部署1.2 激活1.3 登录1.4 扫描web应用程序1.4.1 需要账户密码登录的扫描1.4.2 利用录制登录序列脚本扫描1.4.3 利用定制cookie扫描1.5 扫描报告分析1.5.1 AWVS报告类型1.5.2 最常用的报告类型&#xff1a…

Hive小文件问题

1、小文件产生的原因 数据源本身有很多小文件&#xff1a;reduce数量多导致生成的小文件增多&#xff1a;使用动态分区导致小文件增多&#xff1a; 2、小文件危害 HDFS内存资源消耗过大&#xff0c;并限制了数据存储规模&#xff1a;在HDFS中&#xff0c;具体的文件保存在da…

静态链表常用操作(节点计数/查找/增加/删除)

1.封装计算链表节点个数的API 代码心得&#xff1a; cnt是count的缩写&#xff0c;用来计数。节点&#xff0c;我们一般指的是链表中数据的地址&#xff08;指针&#xff09;。比如节点1就是第一个结构体的地址&#xff0c;节点2就是第2个结构体的地址&#xff0c;以此类推。…

Adaptive AUTOSAR架构和特性介绍

概述 本文主要内容分为两章节。第一章节简要介绍了AUTOSAR的软件架构,设计理念以及方法论,对Classic Platform和Adaptive Platform做了简单的比较。第二章主要介绍了Adaptive Platform的特性。 第一章 AUTOSAR架构介绍 AUTOSAR(AUTomotive Open System ARchitecture)是汽车…

MySQL性能优化(四)性能优化总结

文章目录连接优化服务端链接优化客户端连接优化配置的优化架构优化数据库高可用&#xff1a;数据库慢查询慢查询日志profiling工具表结构和存储引擎的优化存储引擎&#xff1a;表结构SQL与索引的优化案例- 执行计划 ExplainID序号select type查询类型type 针对单表的访问方法Sy…

ChatGPT 与 MindShow 一分钟搞定一个PPT

前言 PPT制作是商务、教育和各种场合演讲的重要组成部分。然而&#xff0c;很多人会花费大量时间和精力在内容生成和视觉设计方面。为了解决这个问题&#xff0c;我们可以利用两个强大的工具——ChatGPT和MindShow&#xff0c;来提高制作PPT的效率。 一、ChatGPT 与 MindShow…

Linux操作系统ARM体系结构处理器机制原理与实现

ARM 的概念ARM(Advanced RISC Machine)&#xff0c;既可以认为是一个公司的名字&#xff0c;也可以认为是对一类微处理器的通称&#xff0c;还可以认为是一种技术的名字。ARM 公司并不生产芯片也不销售芯片&#xff0c;它只出售芯片技术授权。其合作公司针对不同需求搭配各类硬…

ChatGPT惨遭围剿?多国封杀、近万人联名抵制……

最近&#xff0c;全世界燃起一股围剿ChatGPT的势头。由马斯克、图灵奖得主Bengio等千人联名的“暂停高级AI研发”的公开信&#xff0c;目前签名数量已上升至9000多人。除了业内大佬&#xff0c;欧盟各国和白宫也纷纷出手。 最早“动手”的是意大利&#xff0c;直接在全国上下封…