理论讲解

什么是DOM操作?

DOM(Document Object Model,文档对象模型)是HTML和XML文档的编程接口,它将文档表示为树形结构,其中每个节点都是文档的一个部分。DOM操作是指对文档树中的节点进行创建、修改、删除、查询等操作的过程。

jQuery提供了丰富的DOM操作方法,使开发者能够更简洁、更高效地操作HTML文档结构。

jQuery DOM操作的分类

  • 内容操作:修改元素的文本内容和HTML内容
  • 属性操作:获取和设置元素的属性
  • CSS操作:修改元素的样式
  • 元素操作:创建、添加、删除和替换元素
  • 遍历操作:遍历DOM树中的元素

内容操作

内容操作方法用于修改元素的文本内容和HTML内容。

方法 描述 示例
text() 获取或设置元素的文本内容 $('p').text('Hello')
html() 获取或设置元素的HTML内容 $('div').html('<p>Hello</p>')
val() 获取或设置表单元素的值 $('input').val('John')

属性操作

属性操作方法用于获取和设置元素的属性。

方法 描述 示例
attr() 获取或设置元素的属性 $('img').attr('src', 'image.jpg')
removeAttr() 删除元素的属性 $('a').removeAttr('target')
prop() 获取或设置元素的属性(对于布尔属性) $('input[type="checkbox"]').prop('checked', true)
removeProp() 删除元素的属性 $('div').removeProp('disabled')

CSS操作

CSS操作方法用于修改元素的样式。

方法 描述 示例
css() 获取或设置元素的CSS属性 $('p').css('color', 'red')
addClass() 为元素添加一个或多个类 $('div').addClass('highlight')
removeClass() 从元素中删除一个或多个类 $('div').removeClass('highlight')
toggleClass() 切换元素的类(如果存在则删除,不存在则添加) $('div').toggleClass('highlight')
hasClass() 检查元素是否包含指定的类 $('div').hasClass('highlight')

元素操作

元素操作方法用于创建、添加、删除和替换元素。

创建元素

// 创建元素 const $p = $("<p>这是一个新段落</p>"); const $div = $("<div><h3>标题</h3><p>内容</p></div>");

添加元素

方法 描述 示例
append() 在元素内部的末尾添加内容 $('div').append('<p>末尾内容</p>')
prepend() 在元素内部的开头添加内容 $('div').prepend('<p>开头内容</p>')
after() 在元素外部的后面添加内容 $('div').after('<p>后面内容</p>')
before() 在元素外部的前面添加内容 $('div').before('<p>前面内容</p>')

删除元素

方法 描述 示例
remove() 删除元素及其所有子元素 $('p').remove()
empty() 删除元素的所有子元素 $('div').empty()
detach() 删除元素但保留其数据和事件 $('p').detach()

替换元素

方法 描述 示例
replaceWith() 用新内容替换元素 $('p').replaceWith('<div>新内容</div>')
replaceAll() 用元素替换所有匹配的元素 $('<div>新内容</div>').replaceAll('p')

遍历操作

遍历操作方法用于遍历DOM树中的元素。

方法 描述 示例
children() 获取元素的直接子元素 $('div').children()
parent() 获取元素的直接父元素 $('p').parent()
parents() 获取元素的所有祖先元素 $('p').parents()
siblings() 获取元素的所有兄弟元素 $('p').siblings()
find() 在元素的后代中查找匹配的元素 $('div').find('p')
each() 遍历匹配的元素集合 $('p').each(function(index, element) { ... })

代码示例

示例1:内容操作

<!DOCTYPE html> <html> <head> <title>jQuery内容操作示例</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script> $(document).ready(function() { // 设置文本内容 $("#set-text").click(function() { $("#text-example").text("这是新的文本内容"); }); // 获取文本内容 $("#get-text").click(function() { const text = $("#text-example").text(); alert("文本内容:" + text); }); // 设置HTML内容 $("#set-html").click(function() { $("#html-example").html("<h3>新标题</h3><p>这是新的HTML内容</p>"); }); // 获取HTML内容 $("#get-html").click(function() { const html = $("#html-example").html(); alert("HTML内容:" + html); }); // 设置表单值 $("#set-val").click(function() { $("#input-example").val("John Doe"); }); // 获取表单值 $("#get-val").click(function() { const val = $("#input-example").val(); alert("表单值:" + val); }); }); </script> </head> <body> <h2>jQuery内容操作示例</h2> <h3>文本操作</h3> <p id="text-example">这是初始文本内容</p> <button id="set-text">设置文本内容</button> <button id="get-text">获取文本内容</button> <h3>HTML操作</h3> <div id="html-example"> <p>这是初始HTML内容</p> </div> <button id="set-html">设置HTML内容</button> <button id="get-html">获取HTML内容</button> <h3>表单值操作</h3> <input type="text" id="input-example" value="初始值"> <button id="set-val">设置表单值</button> <button id="get-val">获取表单值</button> </body> </html>

示例2:属性和CSS操作

<!DOCTYPE html> <html> <head> <title>jQuery属性和CSS操作示例</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <style> .highlight { background-color: yellow; font-weight: bold; } .bordered { border: 2px solid red; padding: 10px; } </style> <script> $(document).ready(function() { // 属性操作 $("#set-attr").click(function() { $("#image-example").attr("src", "https://picsum.photos/id/237/200/150"); }); $("#get-attr").click(function() { const src = $("#image-example").attr("src"); alert("图片地址:" + src); }); $("#remove-attr").click(function() { $("#link-example").removeAttr("target"); alert("已删除target属性"); }); // CSS操作 $("#set-css").click(function() { $("#css-example").css({"color": "blue", "font-size": "20px"}); }); $("#add-class").click(function() { $("#class-example").addClass("highlight bordered"); }); $("#remove-class").click(function() { $("#class-example").removeClass("highlight"); }); $("#toggle-class").click(function() { $("#class-example").toggleClass("bordered"); }); $("#check-class").click(function() { const hasClass = $("#class-example").hasClass("highlight"); alert("是否包含highlight类:" + hasClass); }); }); </script> </head> <body> <h2>jQuery属性和CSS操作示例</h2> <h3>属性操作</h3> <img id="image-example" src="https://picsum.photos/id/1/200/150" alt="示例图片"> <button id="set-attr">设置图片地址</button> <button id="get-attr">获取图片地址</button> <p><a id="link-example" href="https://www.example.com" target="_blank">示例链接</a></p> <button id="remove-attr">删除target属性</button> <h3>CSS操作</h3> <p id="css-example">这是CSS操作示例文本</p> <button id="set-css">设置CSS样式</button> <p id="class-example">这是类操作示例文本</p> <button id="add-class">添加类</button> <button id="remove-class">删除类</button> <button id="toggle-class">切换类</button> <button id="check-class">检查类</button> </body> </html>

示例3:元素操作

<!DOCTYPE html> <html> <head> <title>jQuery元素操作示例</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <style> .box { border: 1px solid #ddd; padding: 10px; margin: 10px 0; background-color: #f9f9f9; } </style> <script> $(document).ready(function() { // 创建元素 $("#create-element").click(function() { const $newElement = $("<div class='box'><h4>新创建的元素</h4><p>这是通过jQuery创建的新元素</p></div>"); $("#element-container").append($newElement); }); // 添加元素 $("#append-element").click(function() { $("#element-container").append("<p>这是append添加的内容</p>"); }); $("#prepend-element").click(function() { $("#element-container").prepend("<p>这是prepend添加的内容</p>"); }); $("#after-element").click(function() { $("#element-container").after("<p>这是after添加的内容</p>"); }); $("#before-element").click(function() { $("#element-container").before("<p>这是before添加的内容</p>"); }); // 删除元素 $("#remove-element").click(function() { $("#element-container .box").remove(); }); $("#empty-element").click(function() { $("#element-container").empty(); }); // 替换元素 $("#replace-element").click(function() { $("#element-container p:first").replaceWith("<h4>这是替换后的内容</h4>"); }); }); </script> </head> <body> <h2>jQuery元素操作示例</h2> <div id="element-container" class="box"> <h3>元素容器</h3> <p>这是初始内容</p> </div> <button id="create-element">创建元素</button> <button id="append-element">Append内容</button> <button id="prepend-element">Prepend内容</button> <button id="after-element">After内容</button> <button id="before-element">Before内容</button> <button id="remove-element">删除元素</button> <button id="empty-element">清空内容</button> <button id="replace-element">替换元素</button> </body> </html>

示例4:遍历操作

<!DOCTYPE html> <html> <head> <title>jQuery遍历操作示例</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <style> .box { border: 1px solid #ddd; padding: 10px; margin: 10px 0; background-color: #f9f9f9; } .highlight { background-color: #e8f4f8; border-color: #2196f3; } </style> <script> $(document).ready(function() { // 遍历子元素 $("#children").click(function() { $("#traversal-example").children().addClass("highlight"); }); // 遍历父元素 $("#parent").click(function() { $("#target-element").parent().addClass("highlight"); }); // 遍历祖先元素 $("#parents").click(function() { $("#target-element").parents().addClass("highlight"); }); // 遍历兄弟元素 $("#siblings").click(function() { $("#target-element").siblings().addClass("highlight"); }); // 查找元素 $("#find").click(function() { $("#traversal-example").find("p").addClass("highlight"); }); // 遍历元素集合 $("#each").click(function() { $("#traversal-example p").each(function(index, element) { $(this).text("段落 " + (index + 1) + ": " + $(this).text()); }); }); // 重置 $("#reset").click(function() { $("*").removeClass("highlight"); $("#traversal-example p:first").text("这是第一个段落"); $("#traversal-example p:eq(1)").text("这是第二个段落"); $("#target-element").text("这是目标元素"); $("#traversal-example p:last").text("这是第四个段落"); }); }); </script> </head> <body> <h2>jQuery遍历操作示例</h2> <div id="traversal-example" class="box"> <h3>遍历示例容器</h3> <p>这是第一个段落</p> <div class="box"> <p id="target-element">这是目标元素</p> <p>这是第三个段落</p> </div> <p>这是第四个段落</p> </div> <button id="children">遍历子元素</button> <button id="parent">遍历父元素</button> <button id="parents">遍历祖先元素</button> <button id="siblings">遍历兄弟元素</button> <button id="find">查找元素</button> <button id="each">遍历元素集合</button> <button id="reset">重置</button> </body> </html>

实践案例

案例:动态列表管理器

使用jQuery实现一个动态列表管理器,展示jQuery的DOM操作能力,包括元素的创建、添加、删除和修改等操作。

<!DOCTYPE html> <html> <head> <title>动态列表管理器</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <style> .container { max-width: 600px; margin: 0 auto; padding: 20px; } h1 { text-align: center; color: #333; } .input-section { margin-bottom: 20px; } input[type="text"] { width: 70%; padding: 10px; font-size: 16px; border: 1px solid #ddd; border-radius: 4px; } button { padding: 10px 20px; font-size: 16px; background-color: #4CAF50; color: white; border: none; border-radius: 4px; cursor: pointer; margin-left: 10px; } button:hover { background-color: #45a049; } .list-section { margin-top: 20px; } ul { list-style-type: none; padding: 0; } li { padding: 10px; border-bottom: 1px solid #ddd; display: flex; justify-content: space-between; align-items: center; } li:hover { background-color: #f5f5f5; } .task-text { flex: 1; } .task-actions { display: flex; gap: 10px; } .edit-btn { background-color: #2196F3; } .edit-btn:hover { background-color: #0b7dda; } .delete-btn { background-color: #f44336; } .delete-btn:hover { background-color: #da190b; } .completed { text-decoration: line-through; color: #888; } .edit-input { width: 100%; padding: 5px; border: 1px solid #ddd; border-radius: 4px; } </style> <script> $(document).ready(function() { // 添加任务 $("#add-task").click(function() { const taskText = $("#task-input").val().trim(); if (taskText) { const taskItem = $(` <li> <span class="task-text">${taskText}</span> <div class="task-actions"> <button class="edit-btn">编辑</button> <button class="delete-btn">删除</button> </div> </li> `); $("#task-list").append(taskItem); $("#task-input").val(""); } }); // 按Enter键添加任务 $("#task-input").keypress(function(e) { if (e.which === 13) { $("#add-task").click(); } }); // 编辑任务 $(document).on("click", ".edit-btn", function() { const taskItem = $(this).closest("li"); const taskText = taskItem.find(".task-text").text(); taskItem.html(` <input type="text" class="edit-input" value="${taskText}"> <div class="task-actions"> <button class="save-btn">保存</button> <button class="cancel-btn">取消</button> </div> `); taskItem.find(".edit-input").focus(); }); // 保存任务 $(document).on("click", ".save-btn", function() { const taskItem = $(this).closest("li"); const newTaskText = taskItem.find(".edit-input").val().trim(); if (newTaskText) { taskItem.html(` <span class="task-text">${newTaskText}</span> <div class="task-actions"> <button class="edit-btn">编辑</button> <button class="delete-btn">删除</button> </div> `); } else { taskItem.remove(); } }); // 取消编辑 $(document).on("click", ".cancel-btn", function() { const taskItem = $(this).closest("li"); const originalText = taskItem.find(".edit-input").val(); taskItem.html(` <span class="task-text">${originalText}</span> <div class="task-actions"> <button class="edit-btn">编辑</button> <button class="delete-btn">删除</button> </div> `); }); // 删除任务 $(document).on("click", ".delete-btn", function() { $(this).closest("li").remove(); }); // 标记任务完成/未完成 $(document).on("click", ".task-text", function() { $(this).toggleClass("completed"); }); }); </script> </head> <body> <div class="container"> <h1>动态列表管理器</h1> <div class="input-section"> <input type="text" id="task-input" placeholder="输入任务内容..."> <button id="add-task">添加任务</button> </div> <div class="list-section"> <h2>任务列表</h2> <ul id="task-list"> <li> <span class="task-text">学习jQuery基础</span> <div class="task-actions"> <button class="edit-btn">编辑</button> <button class="delete-btn">删除</button> </div> </li> <li> <span class="task-text">练习DOM操作</span> <div class="task-actions"> <button class="edit-btn">编辑</button> <button class="delete-btn">删除</button> </div> </li> <li> <span class="task-text">创建实践项目</span> <div class="task-actions"> <button class="edit-btn">编辑</button> <button class="delete-btn">删除</button> </div> </li> </ul> </div> </div> </body> </html>

这个案例展示了如何使用jQuery实现一个动态列表管理器,包括以下功能:

  • 添加新任务
  • 编辑现有任务
  • 删除任务
  • 标记任务完成/未完成
  • 通过Enter键添加任务

该案例使用了多种jQuery DOM操作方法,如append()、html()、find()、closest()、on()等,展示了jQuery在实际项目中的应用。

互动练习

练习:DOM操作 playground

创建一个DOM操作 playground,使用jQuery实现以下功能:

  1. 在输入框中输入文本内容
  2. 选择操作类型(添加、删除、修改、查询)
  3. 点击"执行操作"按钮,执行相应的DOM操作
  4. 查看操作结果

Playground 容器

初始段落1

初始段落2

目标div元素

初始段落3

推荐链接

相关教程

  • jQuery选择器 - 学习jQuery选择器的使用方法,包括基本选择器、层次选择器、过滤选择器和表单选择器等。
  • jQuery事件处理 - 学习jQuery的事件处理机制,包括事件绑定、事件对象、事件类型、事件委托和自定义事件等。
  • JavaScript DOM操作 - 了解原生JavaScript的DOM操作方法,对比jQuery和原生JavaScript的差异。