当前位置: 首页 > article >正文

分享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

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


http://www.kler.cn/a/9521.html

相关文章:

  • 为什么hbase在大数据领域渐渐消失
  • HBase使用create创建表时报错ERROR: KeeperErrorCode = NoNode for /hbase/master
  • ssm100医学生在线学习交流平台+vue(论文+源码)_kaic
  • 同三维T610UDP-4K60 4K60 DP或HDMI或手机信号采集卡
  • 拦截器实现http请求访问本地图片
  • git之 revert和rebase
  • 超越辅助:分享一个基于GPT引擎的免费AI工具
  • 一文解读基于PaddleSeg的钢筋长度超限监控方案
  • 管廊隧道怎么定位人员?分享管廊隧道人员定位系统解决方案
  • ubuntu16.04搭建gitlab
  • 原油期货是什么?原油期货交易盈利技巧有哪些?
  • MyBatis动态SQL教程:灵活处理复杂SQL场景,提升性能与可维护性
  • 二叉树练习题(递归展开图详解哦)
  • 21. 合并两个有序链表(Java)
  • 坦克大战第一阶段代码
  • 电子学会2023年3月青少年软件编程python等级考试试卷(一级)真题,含答案解析
  • 6、springboot快速使用
  • USB在虚拟机中不显示以及没有访问权限
  • C程序设计-小学生计算机教学辅助系统(四则运算)
  • 磁盘移臂调度算法
  • 【Bug解决】AttributeError: ‘DataParallel‘ object has no attribute ‘XXX‘
  • 【store商城项目08】删除用户的收获地址
  • 建龙转债上市价格预测 - 配了38张道氏,希望不要乱跌
  • unity--半圆包围posiotion
  • springboot+jwt令牌简单登录案例
  • 【校招VIP】南邮的计算机研究生面试,竟然说开发岗只是增删改查,而且项目QPS并发量数量过于吓人