这是测试文本,单击 “编辑” 按钮更改此文本。
HTML DOM访问知识点汇总
专为编程小白设计的大白话版DOM操作指南
document (文档根节点)
html (网页根元素)
head (头部)
title (网页标题)
meta (元信息)
style (CSS样式)
body (主体)
header (顶部区域)
div (内容容器)
p (段落)
button (按钮)
footer (底部区域)
什么是DOM?
大白话解释: 想象一下,DOM就是浏览器把你的HTML代码变成的一个”家谱图”。每个HTML标签(如<div>、<p>等)都变成这个家谱中的一个成员(节点),DOM就是让你可以通过JavaScript与这些成员对话的工具。
📌 关键点: DOM = 网页的结构化表示,用树形结构组织所有元素。通过DOM你可以用JavaScript改变网页的内容、样式和行为。
访问DOM元素的方法
1. 通过ID获取元素
每个身份证(ID)是唯一的,通过ID可以精准找到一个人:
// 获取ID为”header”的元素
let header = document.getElementById(‘header’);
let header = document.getElementById(‘header’);
示例: 你想找到网页中唯一的”登录按钮”(假设它的id=”loginBtn”),就可以用这个方法。
2. 通过类名获取元素
就像通过班级找学生,一个班级可以有多个学生:
// 获取所有class包含”item”的元素
let items = document.getElementsByClassName(‘item’);
let items = document.getElementsByClassName(‘item’);
💡 注意: 这个方法返回的是一个”活的”集合(HTMLCollection),当你添加或删除元素时,它会自动更新。
3. 通过标签名获取元素
就像根据职业找人(如所有医生):
// 获取所有<p>标签元素
let paragraphs = document.getElementsByTagName(‘p’);
let paragraphs = document.getElementsByTagName(‘p’);
4. 通过CSS选择器获取元素
最强大的方法!就像用复杂的条件找人:
// 获取第一个匹配CSS选择器的元素
let firstItem = document.querySelector(‘.list li:first-child’);
// 获取所有匹配CSS选择器的元素
let allItems = document.querySelectorAll(‘.list li’);
let firstItem = document.querySelector(‘.list li:first-child’);
// 获取所有匹配CSS选择器的元素
let allItems = document.querySelectorAll(‘.list li’);
⚠️ 重要: querySelectorAll 返回的是NodeList(节点列表),不是”活的”集合。当你添加新元素时,它不会自动更新。
DOM导航 – 节点关系
找到元素后,可以通过它们的关系找到其他元素:
1. 父子关系
// 获取父元素
let parent = element.parentElement;
// 获取所有子元素
let children = element.children;
// 获取第一个子元素
let firstChild = element.firstElementChild;
// 获取最后一个子元素
let lastChild = element.lastElementChild;
let parent = element.parentElement;
// 获取所有子元素
let children = element.children;
// 获取第一个子元素
let firstChild = element.firstElementChild;
// 获取最后一个子元素
let lastChild = element.lastElementChild;
2. 兄弟关系
// 获取上一个兄弟元素
let prevSibling = element.previousElementSibling;
// 获取下一个兄弟元素
let nextSibling = element.nextElementSibling;
let prevSibling = element.previousElementSibling;
// 获取下一个兄弟元素
let nextSibling = element.nextElementSibling;
试一试DOM导航
爷爷元素
父元素
子元素1
子元素2
子元素3
操作元素内容
1. innerHTML – 获取或设置元素的HTML内容
// 获取元素内的HTML内容
let content = element.innerHTML;
// 设置元素内的HTML内容
element.innerHTML = ‘<strong>新内容</strong>’;
let content = element.innerHTML;
// 设置元素内的HTML内容
element.innerHTML = ‘<strong>新内容</strong>’;
⚠️ 安全注意: 使用innerHTML设置用户提供的内容时可能有安全风险(XSS攻击),请确保对内容进行过滤或转义。
2. textContent – 安全设置纯文本
当你只需要设置文本内容时,textContent更安全:
// 获取元素内的纯文本(不含HTML标签)
let text = element.textContent;
// 设置元素内的纯文本(HTML标签会被转义)
element.textContent = ‘<strong>安全文本</strong>’;
let text = element.textContent;
// 设置元素内的纯文本(HTML标签会被转义)
element.textContent = ‘<strong>安全文本</strong>’;
3. innerText – 获取渲染后的文本
与textContent类似,但会考虑CSS样式:
// 获取元素内可见的文本
let visibleText = element.innerText;
let visibleText = element.innerText;
操作元素属性
1. getAttribute() – 获取属性值
// 获取元素的href属性值
let link = document.querySelector(‘a’);
let url = link.getAttribute(‘href’);
let link = document.querySelector(‘a’);
let url = link.getAttribute(‘href’);
2. setAttribute() – 设置属性值
// 设置元素的src属性
let image = document.querySelector(‘img’);
image.setAttribute(‘src’, ‘new-image.jpg’);
let image = document.querySelector(‘img’);
image.setAttribute(‘src’, ‘new-image.jpg’);
3. 直接访问属性
对于标准属性(id, class, href, src等),可以直接访问:
// 直接获取和设置id
let elementId = element.id;
element.id = ‘new-id’;
let elementId = element.id;
element.id = ‘new-id’;
4. classList – 操作类名
比直接操作className更优雅的方式:
// 添加类
element.classList.add(‘active’);
// 移除类
element.classList.remove(‘old-class’);
// 切换类(有则删,无则加)
element.classList.toggle(‘highlight’);
// 检查是否包含类
if (element.classList.contains(‘hidden’)) {
// 执行操作
}
element.classList.add(‘active’);
// 移除类
element.classList.remove(‘old-class’);
// 切换类(有则删,无则加)
element.classList.toggle(‘highlight’);
// 检查是否包含类
if (element.classList.contains(‘hidden’)) {
// 执行操作
}
快速参考
DOM选择器速查表
- ID选择: getElementById(‘id’)
- 类选择: getElementsByClassName(‘class’)
- 标签选择: getElementsByTagName(‘div’)
- CSS选择单个: querySelector(‘selector’)
- CSS选择多个: querySelectorAll(‘selector’)
DOM导航速查表
- 父元素: parentElement
- 所有子元素: children
- 第一个子元素: firstElementChild
- 最后一个子元素: lastElementChild
- 下一个兄弟: nextElementSibling
- 上一个兄弟: previousElementSibling
内容操作
- innerHTML: 包含HTML的内容
- textContent: 纯文本内容
- innerText: 可见文本内容
注意事项
- DOM操作相对耗时,避免频繁操作
- 将多次操作合并为一次可以提高性能
- innerHTML存在安全风险
- querySelectorAll返回的是静态NodeList
- getElementsByClassName返回的是实时HTMLCollection
学习方法建议
- 打开浏览器的开发者工具(F12)
- 在Console面板中练习DOM操作
- 尝试修改真实网页的元素
- 从小例子开始逐步构建
- 理解后再记忆,不要死记硬背