JS DOM属性操作完全指南:内容、样式与自定义属性

前言

DOM操作的核心在于操作元素的内容、属性和样式。本文系统讲解如何使用JavaScript修改网页元素的文本内容HTML内容标准属性样式属性 以及自定义属性 ,并介绍经典的排他思想算法。掌握这些内容,你就能灵活操控网页的方方面面。


一、改变元素内容

1.1 三种方式对比

属性 说明 是否保留空格换行 是否识别HTML标签
innerText 获取或设置元素的文本内容 ❌ 去除 ❌ 不识别
innerHTML 获取或设置元素的HTML内容 ✅ 保留 ✅ 识别
textContent 获取或设置文本内容,保留格式 ✅ 保留 ❌ 不识别

1.2 读取时的区别

复制代码
// HTML结构:<div><a href="#">天气炎热</a></div>

console.log(divEle.innerText);   // "天气炎热"(去除了标签)
console.log(divEle.innerHTML);   // "<a href="#">天气炎热</a>"(包含标签)
console.log(divEle.textContent); // "天气炎热"(保留了格式)

小结

  • innerText:去除空格、换行和标签,只读文本
  • innerHTML:可以获取到元素里面的标签,同时保留空格和换行

1.3 写入时的区别

复制代码
divEle.innerText = "<h1>天气凉爽</h1>";
// 页面显示文本:"<h1>天气凉爽</h1>"(不识别标签)

divEle.innerHTML = "<h1>天气凉爽</h1>";
// 页面渲染为h1标题(识别并解析标签)

1.4 nodeValue 与 textContent

nodeValue:是所有节点对象都具有的属性,返回值取决于节点类型:

节点类型 nodeValue返回值
元素节点 null
文本节点 文本内容
属性节点 属性的值

textContent:返回元素及其所有后代的文本内容,保留格式但不渲染HTML。

1.5 应用场景:内容切换

复制代码
let flag = true;

function toggleContent() {
    if (flag) {
        divEle.innerHTML = "<h2>内容一</h2>";
    } else {
        divEle.innerHTML = "<h2>内容二</h2>";
    }
    flag = !flag;
}

二、操作元素标准属性

2.1 常见可操作属性

属性 说明 示例
src 图片路径 imgEle.src = "./img/pic.jpg"
title 提示文本 imgEle.title = "图片说明"
value 表单元素值 inp.value = "新内容"
disabled 禁用状态 inp.disabled = true
type 表单类型 inp.type = "password"

2.2 图片切换示例

复制代码
let imgEle = document.querySelector("img");

// 切换为小狗图片
function showDog() {
    imgEle.src = "./img/pic_01.jpg";
    imgEle.title = "小狗";
}

// 切换为小猫图片
function showCat() {
    imgEle.src = "./img/pic_02.jpg";
    imgEle.title = "小猫";
}

2.3 表单元素操作

复制代码
let inp = document.querySelector("input");

// 修改输入框内容
document.getElementById("edit").onclick = function() {
    inp.value = "内容被修改了";
};

// 禁用输入框
document.getElementById("dis").onclick = function() {
    inp.disabled = true;
};

三、操作样式属性

3.1 两种操作方式

方式 语法 特点
行内样式 element.style.属性名 直接修改行内样式,权重高
类名样式 element.className 批量修改样式,效率更高

3.2 行内样式操作

注意事项

  • JS中的样式属性采用驼峰命名法 ,如 fontSizebackgroundColor

  • 修改的是行内样式,CSS权重较高

    let box = document.querySelector(".box");

    // 方法一:直接设置style属性
    box.style = "background-color: pink;";

    // 方法二:通过style对象设置(推荐)
    box.style.backgroundColor = "pink";
    box.style.fontSize = "30px";
    box.style.color = "red";

3.3 类名操作

注意事项

  • class 是保留字,因此使用 className 来操作类名属性

  • className直接覆盖原先的类名,如需保留需手动拼接

    // 添加类名(保留原有类名)
    box.addEventListener("mouseenter", function() {
    box.className = "box box1"; // 保留box类,添加box1类
    });

    // 完全替换类名
    box.className = "newClass";


四、排他思想

4.1 算法原理

排他思想常用于按钮组、选项卡等场景,核心步骤如下:

步骤 操作 说明
清除所有 清除所有同类元素的样式
设置当前 为当前触发的元素设置特殊样式

注意:顺序不能颠倒,必须先清除再设置。

4.2 代码实现

复制代码
let btns = document.querySelectorAll("button");

for (let i = 0; i < btns.length; i++) {
    btns[i].onclick = function() {
        // 第一步:清除所有按钮的样式
        for (let j = 0; j < btns.length; j++) {
            btns[j].style.backgroundColor = "";
        }
        // 第二步:为当前按钮设置样式
        this.style.backgroundColor = "pink";
    };
}

4.3 this指向问题

在事件回调函数中,this 指向触发事件的元素(事件源)。

复制代码
btns[i].onclick = function() {
    console.log(this); // 指向被点击的按钮
};

4.4 var与let的区别

关键字 作用域 变量提升 适用场景
var 函数作用域 ✅ 存在 旧代码兼容
let 块级作用域 ❌ 不存在 现代开发推荐

在循环绑定事件时,使用 let 可以避免经典的作用域问题:

复制代码
// 使用var时,所有点击都输出最后一个值
for (var i = 0; i < 5; i++) {
    btns[i].onclick = function() {
        console.log(i); // 全部输出5
    };
}

// 使用let时,每个点击输出正确的索引
for (let i = 0; i < 5; i++) {
    btns[i].onclick = function() {
        console.log(i); // 输出对应的索引值
    };
}

五、自定义属性操作

5.1 标准操作方法

方法 功能 适用场景
element.getAttribute('属性') 获取属性值 自定义属性和标准属性
element.setAttribute('属性', '值') 设置属性值 自定义属性和标准属性
element.removeAttribute('属性') 移除属性 自定义属性和标准属性
复制代码
let aEle = document.querySelector("a");

// 获取属性
console.log(aEle.getAttribute("hello")); // 获取自定义属性
console.log(aEle.getAttribute("href"));  // 获取标准属性

// 设置属性
aEle.setAttribute("hello", "abc");
aEle.setAttribute("href", "abc");

// 移除属性
aEle.removeAttribute("hello");
aEle.removeAttribute("href");

5.2 两种获取方式的区别

方式 语法 适用范围
直接属性访问 element.属性名 仅限元素自带的标准属性(id、href、src等)
getAttribute element.getAttribute('属性') 标准属性和自定义属性均可

5.3 H5自定义属性规范

H5规定自定义属性以 data- 开头,多个单词用 - 连接。

复制代码
<div data-a="hello" data-first-name="张三"></div>

两种读取方式

复制代码
let div = document.querySelector("div");

// 方式一:getAttribute(通用)
console.log(div.getAttribute("data-a"));         // "hello"
console.log(div.getAttribute("data-first-name")); // "张三"

// 方式二:dataset对象(推荐,H5规范)
console.log(div.dataset.a);        // "hello"(点语法)
console.log(div.dataset["a"]);     // "hello"(方括号语法)
console.log(div.dataset.firstName); // "张三"(驼峰命名)

命名转换规则

HTML属性 dataset访问方式
data-a dataset.a
data-hello dataset.hello
data-first-name dataset.firstName
data-last-name dataset.lastName

六、重点总结

6.1 核心方法对比

方法 用途 返回值
innerText 操作纯文本内容 字符串
innerHTML 操作HTML内容 字符串
getAttribute() 获取属性值 字符串
setAttribute() 设置属性值
removeAttribute() 移除属性

6.2 注意事项

项目 说明
样式优先级 行内样式 > ID选择器 > 类选择器 > 标签选择器
性能考虑 className 操作比逐条修改 style 更高效
兼容性 dataset 在IE11+支持良好
代码规范 自定义属性使用 data- 前缀

6.3 最佳实践

场景 推荐做法
样式修改 优先使用类名切换(className)
自定义属性 遵循H5规范(data-前缀)
事件处理 使用 this 指向事件源
循环绑定 使用 let 避免作用域问题

总结

本文系统梳理了JavaScript DOM属性操作的完整知识体系:

主题 核心要点
元素内容 innerText(纯文本)、innerHTML(含标签)、textContent(保留格式)
标准属性 src、title、value、disabled等,直接通过属性名操作
样式属性 style行内样式(驼峰命名)、className类名切换(更高效)
排他思想 先清除所有,再设置当前
自定义属性 getAttribute/setAttribute/removeAttribute + H5 dataset规范

掌握这些内容,你就具备了通过JavaScript灵活操控网页元素的能力。

相关推荐
nvvas1 分钟前
Java 入门(四):数组——数据的集合管理
java·开发语言
默_笙2 分钟前
🚋 从流水线到地铁网:为什么复杂 AI 都要拆成多 Agent(上)——LangGraph 基础入门
前端·javascript
科技苑17 分钟前
前后端分离与微服务架构如何协同?
前端·后端·前端框架
神秘的猪头30 分钟前
TypeScript 高级用法全解析:从泛型到 infer,把类型系统真正用起来
前端·typescript
moMo32 分钟前
React Hooks 与闭包
前端·react.js
ID346107442037 分钟前
【课程设计】基于Spring Boot+Vue的游戏账号租赁系统的设计与实现-计算机毕设 附源码50345
javascript·vue.js·spring boot·python·node.js·php·课程设计
柚yuzumi40 分钟前
彻底搞懂 JavaScript 类型转换:显式转换、隐式转换与 ToPrimitive
前端·javascript·node.js
向北丶41 分钟前
vscode 导入语句排序和删除未使用的导入
前端·visual studio code
Y3815326621 小时前
SERP 数据清洗实战:字段标准化、日期解析与去重键
开发语言·数据库·python·python数据库
PHP实战开发录1 小时前
PHP接口偶发变慢怎么查
前端·php·开发