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

《掌握基础DOM操作:从零开始的前端入门指南》

        在前端开发中,掌握DOM(文档对象模型)操作是每个开发者必备的技能。通过对DOM的熟练操作,我们可以动态地修改网页内容、响应用户交互,甚至优化页面性能。从简单的元素选择到复杂的事件处理,DOM操作是构建现代网页应用的基础。本文将通过一系列常见的DOM操作,帮助你快速入门并掌握这项重要技能。无论你是前端新手,还是希望巩固基础的开发者,都能从中获得实用的技巧和方法。

1. 获取元素

通过 ID 获取元素

let element = document.getElementById('myElement');
console.log(element); // 输出 DOM 元素

通过类名获取元素

let elements = document.getElementsByClassName('myClass');
console.log(elements); // 返回一个 HTMLCollection

通过标签名获取元素

let elements = document.getElementsByTagName('div');
console.log(elements); // 返回一个 HTMLCollection

通过 CSS 选择器获取单个元素

let element = document.querySelector('.myClass');
console.log(element); // 返回第一个匹配的元素

通过 CSS 选择器获取多个元素

let elements = document.querySelectorAll('.myClass');
console.log(elements); // 返回一个 NodeList

2. 创建和插入元素

创建元素

let newElement = document.createElement('div');
newElement.textContent = 'Hello, World!';
console.log(newElement); // 输出新创建的元素

插入元素

// 插入到某个元素的末尾
let parentElement = document.getElementById('parent');
parentElement.appendChild(newElement);

// 插入到某个元素的开头
parentElement.insertBefore(newElement, parentElement.firstChild);

// 插入到某个元素的后面
let referenceElement = document.getElementById('reference');
parentElement.insertBefore(newElement, referenceElement.nextSibling);

3. 修改元素内容

修改文本内容

let element = document.getElementById('myElement');
element.textContent = '新的文本内容';
console.log(element.textContent); // 输出:新的文本内容
let element = document.getElementById('myElement');
element.innerText = '新的文本内容';
console.log(element.innerText); // 输出:新的文本内容

修改 HTML 内容

let element = document.getElementById('myElement');
element.innerHTML = '<span>新的 HTML 内容</span>';
console.log(element.innerHTML); // 输出:<span>新的 HTML 内容</span>

4. 修改元素样式

修改单个样式属性

let element = document.getElementById('myElement');
element.style.color = 'red';
element.style.fontSize = '16px';
console.log(element.style.color); // 输出:red

修改多个样式属性

let element = document.getElementById('myElement');
element.style.cssText = 'color: red; font-size: 16px;';
console.log(element.style.cssText); // 输出:color: red; font-size: 16px;

切换类名

let element = document.getElementById('myElement');
element.classList.add('new-class'); // 添加类名
element.classList.remove('old-class'); // 移除类名
element.classList.toggle('active'); // 切换类名
console.log(element.classList); // 输出:DOMTokenList(2) ["new-class", "active"]

5. 删除元素

let parentElement = document.getElementById('parent');
let childElement = document.getElementById('child');
parentElement.removeChild(childElement);
console.log(parentElement.contains(childElement)); // 输出:false

6. 事件处理

添加事件监听器

let button = document.getElementById('myButton');
button.addEventListener('click', function(event) {
  console.log('按钮被点击了');
  console.log(event.target); // 输出:按钮元素
});

移除事件监听器

let button = document.getElementById('myButton');
function handleClick() {
  console.log('按钮被点击了');
}
button.addEventListener('click', handleClick);
button.removeEventListener('click', handleClick);

事件对象

let button = document.getElementById('myButton');
button.addEventListener('click', function(event) {
  console.log(event.target); // 被点击的元素
  console.log(event.clientX, event.clientY); // 鼠标点击位置
  console.log(event.type); // 事件类型,如 "click"
});

7. 遍历 DOM

访问父元素

let element = document.getElementById('myElement');
let parent = element.parentNode;
console.log(parent); // 输出:父元素

访问子元素

let element = document.getElementById('myElement');
let firstChild = element.firstChild;
let lastChild = element.lastChild;
console.log(firstChild); // 输出:第一个子元素
console.log(lastChild); // 输出:最后一个子元素

访问兄弟元素(排除文本节点)

let element = document.getElementById('myElement');
let nextElementSibling = element.nextElementSibling;
let previousElementSibling = element.previousElementSibling;
console.log(nextElementSibling); // 输出:下一个兄弟元素(排除文本节点)
console.log(previousElementSibling); // 输出:上一个兄弟元素(排除文本节点)

8. 其他常用方法

获取元素的尺寸和位置

let element = document.getElementById('myElement');
let width = element.offsetWidth;
let height = element.offsetHeight;
let left = element.offsetLeft;
let top = element.offsetTop;
console.log(width, height, left, top); // 输出:宽度、高度、左边距、上边距

获取元素的滚动位置

let element = document.getElementById('myElement');
let scrollLeft = element.scrollLeft;
let scrollTop = element.scrollTop;
console.log(scrollLeft, scrollTop); // 输出:水平滚动位置、垂直滚动位置

设置元素的滚动位置

let element = document.getElementById('myElement');
element.scrollLeft = 100;
element.scrollTop = 200;
console.log(element.scrollLeft, element.scrollTop); // 输出:100, 200

获取元素的计算样式

let element = document.getElementById('myElement');
let style = window.getComputedStyle(element);
console.log(style.color); // 输出:元素的 color 样式
console.log(style.fontSize); // 输出:元素的 font-size 样式

9. 实际应用示例

动态添加按钮并绑定点击事件

// 创建按钮
let button = document.createElement('button');
button.textContent = '点击我';

// 添加点击事件
button.addEventListener('click', function() {
  alert('按钮被点击了!');
});

// 插入到页面中
document.body.appendChild(button);

动态修改列表内容

// 获取列表
let list = document.querySelector('ul');

// 创建新列表项
let listItem = document.createElement('li');
listItem.textContent = '新列表项';

// 插入到列表中
list.appendChild(listItem);

动态修改列表内容

let element = document.getElementById('myElement');

// 显示元素
element.style.display = 'block';

// 隐藏元素
element.style.display = 'none';

动态修改表单内容

// 获取表单输入框
let input = document.getElementById('myInput');

// 添加输入事件监听器
input.addEventListener('input', function(event) {
  console.log('输入的内容:', event.target.value);
});

// 获取表单提交按钮
let submitButton = document.getElementById('mySubmit');

// 添加提交事件监听器
submitButton.addEventListener('click', function(event) {
  event.preventDefault(); // 阻止表单默认提交行为
  console.log('表单提交,输入的内容:', input.value);
});

相关文章:

  • C++的常用容器嵌套
  • Android Compose 基础布局之 Box 和 Stack 源码深度剖析(九)
  • 【留一下记录】Vllm在Linux环境下的学习笔记
  • 多路FM调频广播解调器:多路电台FM广播信号一体化解调处理方案
  • Burp Suite HTTPS解密原理
  • 星越L_大灯延时关闭使用讲解
  • vue3之写一个aichat---实现聊天逻辑
  • OpenCV Imgproc 模块使用指南(Python 版)
  • 【ACM竞赛的必要性】
  • 鸿蒙开发工程师简历项目撰写全攻略
  • 力扣刷题——143.重排链表
  • 如何利用环境监控看板提升工厂生产质量和效率
  • 《信息系统安全》(第一次上机实验报告)
  • 无需邀请码,实在智能发布通用智能体-实在Agent
  • 智能,触手可及:揭秘高灵活、高精度仿生机器手的操作与实现
  • django怎么配置404和500
  • 【PCIe 总线及设备入门学习专栏 3.1 -- PCIe 中为何只有 TLP 会被 Switch 和 RC 进行路由?】
  • 【实操】Mybatis-plus2.x升级到3.x
  • 基于深度学习的运动想象脑电信号分类研究
  • django如何配置使用asgi
  • 习近平会见古共中央第一书记、古巴国家主席迪亚斯-卡内尔
  • 欧洲理事会前主席米歇尔受聘中欧国际工商学院特聘教授,上海市市长龚正会见
  • 时隔14个月北京怀柔区重启供地,北京建工以3.59亿元摘得
  • 读图|展现城市品格,上海城市影像走进南美
  • 汪明荃,今生不负你
  • 成都公积金新政征求意见:购买保障性住房最高贷款额度上浮50%