🐸 青蛙编程网
首页 / 前端 / jQuery / 4. DOM 操作

4. DOM 操作

这是什么:DOM(Document Object Model,文档对象模型) = 浏览器把网页结构变成的一棵对象树,标签、文本、属性都能当成节点来改。

为什么用:上一章我们能选中元素了,但改内容、换样式、插删节点仍要写一长串原生代码。jQuery 把这些增删改查都封装成短方法,页面能动的部分全靠它。

如何用:本章分内容、属性样式、元素三块来学,先用 .text() 读出一段文字,再试 .append() 追加和 .remove() 删除。

4.1 内容操作(text、html、val)

jQuery 提供了 3 个常用方法来获取或设置元素的内容。

方法 用途 说明
.text() 获取/设置元素的纯文本内容 会忽略 HTML 标签
.html() 获取/设置元素的 HTML 内容 会保留 HTML 标签
.val() 获取/设置表单元素的值(value) 适用于 input、textarea、select 等表单控件

获取内容

<div id="box">你好,<strong>jQuery</strong></div>
<input type="text" id="name" value="小青蛙" />

<script>
  $(function () {
    console.log($('#box').text()); // "你好,jQuery"(纯文本)
    console.log($('#box').html()); // "你好,<strong>jQuery</strong>"
    console.log($('#name').val());  // "小青蛙"
  });
</script>

设置内容

只需要在括号里传入值,就变成「设置」:

$('#box').text('Hello World');        // 设置纯文本
$('#box').html('Hello <b>World</b>'); // 设置 HTML
$('#name').val('青蛙编程网');           // 设置输入框的值

4.2 属性操作(attr、prop、removeAttr)

属性(Attribute)是 HTML 标签上的额外信息,比如 href、src、title、disabled 等。

方法 说明
.attr() 获取/设置 HTML 属性(attribute)
.removeAttr() 移除指定的 HTML 属性
.prop() 获取/设置 DOM 属性(property),主要用于布尔属性(如 checked、disabled、selected)

推荐做法:对于布尔类型属性(复选框选中、禁用状态等),优先使用 .prop();其他属性用 .attr()。

示例:图片链接切换

<a id="link" href="https://jquery.com" target="_blank">jQuery 官网</a>
<img id="pic" src="https://images.pexels.com/photos/23408576/pexels-photo-23408576.jpeg?auto=compress&cs=tinysrgb&w=320" alt="青蛙照片" width="100" />

<script>
  $(function () {
    // 获取属性
    console.log($('#link').attr('href'));
    // 设置属性
    $('#pic').attr('alt', '青蛙特写');
    // 移除属性
    // $('#link').removeAttr('target');
  });
</script>

示例:复选框选中状态

<input type="checkbox" id="agree" /> 我同意

<script>
  $(function () {
    // 设置选中
    $('#agree').prop('checked', true);
    // 获取选中状态(true/false)
    console.log($('#agree').prop('checked'));
  });
</script>

4.3 CSS 样式操作(css、addClass、removeClass、toggleClass)

jQuery 提供了多种方式操作元素的样式。

方式 1:.css() —— 直接操作行内样式

.css() 可以获取单个样式,或设置一个/多个样式。

// 获取样式
console.log($('p').css('color'));

// 设置单个样式
$('p').css('color', 'red');

// 设置多个样式(传对象)
$('p').css({
  color: '#333',
  fontSize: '16px', // 注意:用驼峰命名(font-size → fontSize)
  backgroundColor: '#f5f5f5'
});

方式 2:class 操作(推荐,用于批量样式控制)

直接操作 class 更符合 CSS 设计思想,便于复用和维护。

方法 说明
.addClass('className') 给元素添加一个或多个 class
.removeClass('className') 移除一个或多个 class
.toggleClass('className') 切换 class(有就移除,没有就添加)
.hasClass('className') 判断元素是否包含某个 class,返回 true/false

示例:

<style>
  .highlight {
    background: yellow;
    font-weight: bold;
  }
  .red {
    color: red;
  }
</style>

<p id="text">这是一段文字</p>
<button id="toggle">切换高亮</button>

<script>
  $(function () {
    $('#text').addClass('red');
    $('#toggle').click(function () {
      $('#text').toggleClass('highlight');
    });
  });
</script>

推荐优先使用 addClass/removeClass/toggleClass,而不是频繁用 .css() 修改单个样式,这样更利于样式和逻辑分离。

4.4 元素操作(增、删、改、移)

除了修改内容,我们还可以动态地添加、删除、移动 DOM 元素。

4.4.1 添加元素

jQuery 提供了多种插入方式,按插入位置分为 内部插入 和 外部插入。

内部插入(在元素内部添加子元素):

方法 说明
.append(content) 在元素的末尾添加内容(作为最后一个子元素)
.prepend(content) 在元素的开头添加内容(作为第一个子元素)
.appendTo(target) 把匹配的元素追加到目标元素内部末尾
.prependTo(target) 把匹配的元素前置到目标元素内部开头

外部插入(在元素外部添加兄弟元素):

方法 说明
.after(content) 在元素的后面插入兄弟元素
.before(content) 在元素的前面插入兄弟元素
.insertAfter(target) 把元素插入到目标元素的后面
.insertBefore(target) 把元素插入到目标元素的前面

示例:append/prepend

<ul id="list">
  <li>香蕉</li>
  <li>苹果</li>
</ul>
<button id="addEnd">末尾添加</button>
<button id="addStart">开头添加</button>

<script>
  $(function () {
    $('#addEnd').click(function () {
      $('#list').append('<li>橙子</li>');
    });
    $('#addStart').click(function () {
      $('#list').prepend('<li>西瓜</li>');
    });
  });
</script>

append() 接收 HTML 字符串、DOM 元素、jQuery 对象都可以。

4.4.2 删除元素

方法 说明
.remove() 删除元素本身及其所有子元素(连同绑定的事件也会被移除)
.empty() 清空元素的所有子元素,但保留元素本身
.detach() 和 .remove() 类似,但保留绑定的事件和数据,适合临时移除后再插回去

示例:

<div id="container">
  <p id="p1">要删除我吗?</p>
  <p id="p2">只是清空内容</p>
</div>

<script>
  $(function () {
    $('#p1').remove(); // 删除 p1 整个元素
    $('#p2').empty();  // 只清空 p2 的内容,p2 标签还在
  });
</script>

4.4.3 替换和复制元素

方法 说明
.replaceWith(content) 用新内容替换匹配的元素
.replaceAll(target) 用匹配的元素替换目标元素(和 replaceWith 方向相反)
.clone([withEvents]) 复制元素。withEvents=true 表示连同事件一起复制(默认 false)
// 用 <h3>标题</h3> 替换 #old
$('#old').replaceWith('<h3>标题</h3>');

// 复制 #btn,并追加到 body
$('#btn').clone(true).appendTo('body');

4.5 小结

本章学习了 jQuery 对 DOM 的常用操作:

  • 内容:text()、html()、val()(读写分离,传参就是设置,不传参就是获取)
  • 属性:attr()、prop()(布尔属性用 prop)
  • 样式:优先用 addClass/removeClass/toggleClass 管理 class,复杂样式用 .css()
  • 元素:append/prepend 内部添加,after/before 外部添加,remove/empty 删除

下一章,我们将学习 jQuery 的 事件处理,让页面真正能响应用户的操作。

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。