Skip to content

jQuery DOM 操作

DOM(Document Object Model)操作是 jQuery 的核心功能之一。通过 jQuery,我们可以轻松地选择、创建、修改和删除 HTML 元素。本章将详细介绍如何使用 jQuery 进行各种 DOM 操作。

获取和设置元素内容

1. text() 方法

获取或设置元素的文本内容(不包含 HTML 标签):

javascript
// 获取文本内容
var text = $('#myElement').text();

// 设置文本内容
$('#myElement').text('新的文本内容');

// 使用函数设置文本内容
$('#myElement').text(function(index, currentText) {
    return '元素 ' + index + ' 的新文本: ' + currentText;
});

2. html() 方法

获取或设置元素的 HTML 内容(包含 HTML 标签):

javascript
// 获取 HTML 内容
var html = $('#myElement').html();

// 设置 HTML 内容
$('#myElement').html('<strong>新的 HTML 内容</strong>');

// 使用函数设置 HTML 内容
$('#myElement').html(function(index, currentHtml) {
    return '<em>元素 ' + index + ' 的新 HTML: ' + currentHtml + '</em>';
});

3. val() 方法

获取或设置表单元素的值:

javascript
// 获取表单元素的值
var value = $('#myInput').val();

// 设置表单元素的值
$('#myInput').val('新的值');

// 获取复选框的选中状态
var isChecked = $('#myCheckbox').val();

// 获取下拉列表的选中值
var selectedValue = $('#mySelect').val();

属性操作

1. attr() 方法

获取或设置元素的属性:

javascript
// 获取属性值
var title = $('#myElement').attr('title');

// 设置属性值
$('#myElement').attr('title', '新的标题');

// 设置多个属性
$('#myElement').attr({
    'title': '新的标题',
    'class': 'newClass',
    'data-id': '123'
});

// 使用函数设置属性值
$('#myElement').attr('title', function(index, currentValue) {
    return '元素 ' + index + ' 的新标题: ' + currentValue;
});

2. removeAttr() 方法

删除元素的属性:

javascript
// 删除单个属性
$('#myElement').removeAttr('title');

// 删除多个属性
$('#myElement').removeAttr('title class data-id');

3. prop() 方法

获取或设置元素的属性(推荐用于布尔属性):

javascript
// 获取属性值
var checked = $('#myCheckbox').prop('checked');

// 设置属性值
$('#myCheckbox').prop('checked', true);

// 设置多个属性
$('#myElement').prop({
    'disabled': true,
    'readonly': true
});

4. removeProp() 方法

删除元素的属性:

javascript
// 删除属性
$('#myElement').removeProp('propertyName');

CSS 类和样式操作

1. addClass() 方法

为元素添加 CSS 类:

javascript
// 添加单个类
$('#myElement').addClass('newClass');

// 添加多个类
$('#myElement').addClass('class1 class2 class3');

// 使用函数添加类
$('#myElement').addClass(function(index, currentClass) {
    return 'class-' + index;
});

2. removeClass() 方法

从元素中移除 CSS 类:

javascript
// 移除单个类
$('#myElement').removeClass('oldClass');

// 移除多个类
$('#myElement').removeClass('class1 class2');

// 移除所有类
$('#myElement').removeClass();

// 使用函数移除类
$('#myElement').removeClass(function(index, currentClass) {
    return currentClass === 'toBeRemoved' ? 'toBeRemoved' : '';
});

3. toggleClass() 方法

切换元素的 CSS 类:

javascript
// 切换类
$('#myElement').toggleClass('highlight');

// 切换多个类
$('#myElement').toggleClass('class1 class2');

// 根据条件切换类
$('#myElement').toggleClass('highlight', someCondition);

// 使用函数切换类
$('#myElement').toggleClass(function(index, currentClass, state) {
    return 'class-' + index;
});

4. hasClass() 方法

检查元素是否包含指定的 CSS 类:

javascript
// 检查是否包含类
if ($('#myElement').hasClass('highlight')) {
    console.log('元素包含 highlight 类');
}

5. css() 方法

获取或设置元素的 CSS 样式:

javascript
// 获取单个 CSS 属性
var color = $('#myElement').css('color');

// 获取多个 CSS 属性
var styles = $('#myElement').css(['color', 'font-size', 'background-color']);

// 设置单个 CSS 属性
$('#myElement').css('color', 'red');

// 设置多个 CSS 属性
$('#myElement').css({
    'color': 'red',
    'font-size': '16px',
    'background-color': '#f0f0f0'
});

// 使用函数设置 CSS 属性
$('#myElement').css('font-size', function(index, currentValue) {
    return parseInt(currentValue) * 1.2 + 'px';
});

元素尺寸和位置

1. width() 和 height() 方法

获取或设置元素的宽度和高度:

javascript
// 获取宽度和高度
var width = $('#myElement').width();
var height = $('#myElement').height();

// 设置宽度和高度
$('#myElement').width(200);
$('#myElement').height(100);

// 设置宽度和高度(使用字符串)
$('#myElement').width('50%');
$('#myElement').height('auto');

// 使用函数设置尺寸
$('#myElement').width(function(index, currentWidth) {
    return currentWidth + 50;
});

2. innerWidth() 和 innerHeight() 方法

获取或设置元素的内部宽度和高度(包含 padding):

javascript
// 获取内部宽度和高度
var innerWidth = $('#myElement').innerWidth();
var innerHeight = $('#myElement').innerHeight();

// 设置内部宽度和高度
$('#myElement').innerWidth(200);
$('#myElement').innerHeight(100);

3. outerWidth() 和 outerHeight() 方法

获取或设置元素的外部宽度和高度(包含 padding 和 border):

javascript
// 获取外部宽度和高度
var outerWidth = $('#myElement').outerWidth();
var outerHeight = $('#myElement').outerHeight();

// 获取外部宽度和高度(包含 margin)
var outerWidthWithMargin = $('#myElement').outerWidth(true);
var outerHeightWithMargin = $('#myElement').outerHeight(true);

// 设置外部宽度和高度
$('#myElement').outerWidth(200);
$('#myElement').outerHeight(100);

DOM 元素操作

1. 创建元素

使用 jQuery 创建新的元素:

javascript
// 创建简单的元素
var $div = $('<div>');

// 创建带有内容的元素
var $p = $('<p>这是一个段落</p>');

// 创建带有属性的元素
var $input = $('<input type="text" class="form-control" placeholder="请输入内容">');

// 创建复杂的元素结构
var $complex = $('<div class="container"><h2>标题</h2><p>内容</p></div>');

2. 插入元素

append() 方法

在元素内部的末尾插入内容:

javascript
// 在元素内部末尾插入内容
$('#myElement').append('<p>新段落</p>');

// 插入现有元素
$('#myElement').append($('#anotherElement'));

// 插入多个内容
$('#myElement').append('<p>段落1</p>', '<p>段落2</p>');

prepend() 方法

在元素内部的开头插入内容:

javascript
// 在元素内部开头插入内容
$('#myElement').prepend('<p>新段落</p>');

// 插入现有元素
$('#myElement').prepend($('#anotherElement'));

after() 方法

在元素后面插入内容:

javascript
// 在元素后面插入内容
$('#myElement').after('<p>新段落</p>');

// 插入现有元素
$('#myElement').after($('#anotherElement'));

before() 方法

在元素前面插入内容:

javascript
// 在元素前面插入内容
$('#myElement').before('<p>新段落</p>');

// 插入现有元素
$('#myElement').before($('#anotherElement'));

3. 删除元素

remove() 方法

删除元素及其所有子元素和事件:

javascript
// 删除元素
$('#myElement').remove();

// 根据条件删除元素
$('p').remove('.highlight');

// 删除元素但保留数据和事件
$('#myElement').remove('.temp');

detach() 方法

删除元素但保留数据和事件:

javascript
// 删除元素但保留数据和事件
var $element = $('#myElement').detach();

// 稍后重新插入元素
$('body').append($element);

empty() 方法

清空元素的内容:

javascript
// 清空元素内容
$('#myElement').empty();

4. 替换元素

replaceWith() 方法

替换元素:

javascript
// 替换元素
$('#myElement').replaceWith('<p>新的内容</p>');

// 使用现有元素替换
$('#myElement').replaceWith($('#anotherElement'));

replaceAll() 方法

替换所有匹配的元素:

javascript
// 替换所有匹配的元素
$('<p>新的内容</p>').replaceAll('.oldClass');

元素遍历

1. 父元素遍历

parent() 方法

获取直接父元素:

javascript
// 获取直接父元素
var $parent = $('#myElement').parent();

// 根据选择器获取父元素
var $specificParent = $('#myElement').parent('.container');

parents() 方法

获取所有祖先元素:

javascript
// 获取所有祖先元素
var $parents = $('#myElement').parents();

// 根据选择器获取祖先元素
var $specificParents = $('#myElement').parents('.container');

parentsUntil() 方法

获取到指定元素为止的所有祖先元素:

javascript
// 获取到指定元素为止的所有祖先元素
var $parentsUntil = $('#myElement').parentsUntil('.container');

2. 子元素遍历

children() 方法

获取直接子元素:

javascript
// 获取所有直接子元素
var $children = $('#myElement').children();

// 根据选择器获取直接子元素
var $specificChildren = $('#myElement').children('.item');

find() 方法

获取所有后代元素:

javascript
// 获取所有后代元素
var $descendants = $('#myElement').find('*');

// 根据选择器获取后代元素
var $specificDescendants = $('#myElement').find('.item');

3. 兄弟元素遍历

siblings() 方法

获取所有兄弟元素:

javascript
// 获取所有兄弟元素
var $siblings = $('#myElement').siblings();

// 根据选择器获取兄弟元素
var $specificSiblings = $('#myElement').siblings('.item');

next() 方法

获取下一个兄弟元素:

javascript
// 获取下一个兄弟元素
var $next = $('#myElement').next();

// 根据选择器获取下一个兄弟元素
var $specificNext = $('#myElement').next('.item');

nextAll() 方法

获取后面的所有兄弟元素:

javascript
// 获取后面的所有兄弟元素
var $nextAll = $('#myElement').nextAll();

// 根据选择器获取后面的所有兄弟元素
var $specificNextAll = $('#myElement').nextAll('.item');

nextUntil() 方法

获取到指定元素为止的后面所有兄弟元素:

javascript
// 获取到指定元素为止的后面所有兄弟元素
var $nextUntil = $('#myElement').nextUntil('.stop');

prev() 方法

获取上一个兄弟元素:

javascript
// 获取上一个兄弟元素
var $prev = $('#myElement').prev();

// 根据选择器获取上一个兄弟元素
var $specificPrev = $('#myElement').prev('.item');

prevAll() 方法

获取前面的所有兄弟元素:

javascript
// 获取前面的所有兄弟元素
var $prevAll = $('#myElement').prevAll();

// 根据选择器获取前面的所有兄弟元素
var $specificPrevAll = $('#myElement').prevAll('.item');

prevUntil() 方法

获取到指定元素为止的前面所有兄弟元素:

javascript
// 获取到指定元素为止的前面所有兄弟元素
var $prevUntil = $('#myElement').prevUntil('.stop');

克隆元素

clone() 方法

克隆元素:

javascript
// 克隆元素(不包含事件和数据)
var $clone = $('#myElement').clone();

// 克隆元素(包含事件和数据)
var $cloneWithData = $('#myElement').clone(true);

// 将克隆的元素插入到页面中
$('body').append($clone);

完整示例

以下是一个展示 jQuery DOM 操作的完整示例:

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>jQuery DOM 操作示例</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <style>
        .container {
            border: 1px solid #ccc;
            padding: 20px;
            margin: 10px 0;
        }
        .highlight {
            background-color: yellow;
        }
        .new-class {
            color: red;
            font-weight: bold;
        }
        .item {
            margin: 5px 0;
            padding: 5px;
            border: 1px solid #eee;
        }
    </style>
</head>
<body>
    <h1>jQuery DOM 操作示例</h1>
    
    <div class="container">
        <h2>内容操作</h2>
        <p id="textContent">这是原始文本内容</p>
        <div id="htmlContent">这是包含 <strong>HTML</strong> 的内容</div>
        <input type="text" id="inputValue" value="原始值">
        <button id="updateContent">更新内容</button>
    </div>
    
    <div class="container">
        <h2>属性操作</h2>
        <div id="attrElement" title="原始标题" class="old-class">属性操作示例</div>
        <button id="updateAttr">更新属性</button>
    </div>
    
    <div class="container">
        <h2>CSS 类和样式操作</h2>
        <div id="styleElement">CSS 操作示例</div>
        <button id="updateStyle">更新样式</button>
    </div>
    
    <div class="container">
        <h2>元素插入和删除</h2>
        <div id="insertContainer">
            <p>原始段落</p>
        </div>
        <button id="addElement">添加元素</button>
        <button id="removeElement">删除元素</button>
    </div>
    
    <div class="container">
        <h2>元素遍历</h2>
        <div class="parent">
            <div class="child">子元素 1</div>
            <div class="child">子元素 2</div>
            <div class="child">子元素 3</div>
        </div>
        <button id="traverse">遍历元素</button>
        <div id="traverseResult"></div>
    </div>
    
    <script>
        $(function() {
            // 内容操作示例
            $('#updateContent').click(function() {
                // 更新文本内容
                $('#textContent').text('这是更新后的文本内容');
                
                // 更新 HTML 内容
                $('#htmlContent').html('这是更新后的包含 <em>HTML</em> 的内容');
                
                // 更新表单值
                $('#inputValue').val('更新后的值');
            });
            
            // 属性操作示例
            $('#updateAttr').click(function() {
                // 更新属性
                $('#attrElement').attr('title', '更新后的标题');
                
                // 添加类
                $('#attrElement').addClass('new-class');
                
                // 设置多个属性
                $('#attrElement').attr({
                    'data-id': '123',
                    'data-name': 'example'
                });
                
                // 显示属性值
                console.log('Title:', $('#attrElement').attr('title'));
                console.log('Class:', $('#attrElement').attr('class'));
            });
            
            // CSS 类和样式操作示例
            $('#updateStyle').click(function() {
                // 添加类
                $('#styleElement').addClass('highlight');
                
                // 设置 CSS 样式
                $('#styleElement').css({
                    'color': 'blue',
                    'font-size': '18px',
                    'padding': '10px'
                });
                
                // 切换类
                $('#styleElement').toggleClass('new-class');
            });
            
            // 元素插入和删除示例
            $('#addElement').click(function() {
                // 在末尾添加元素
                $('#insertContainer').append('<p class="item">新添加的段落</p>');
                
                // 在开头添加元素
                $('#insertContainer').prepend('<p class="item">新添加到开头的段落</p>');
                
                // 在后面添加元素
                $('#insertContainer p:first').after('<p class="item">插入到第一个段落后面的段落</p>');
                
                // 在前面添加元素
                $('#insertContainer p:last').before('<p class="item">插入到最后一个段落前面的段落</p>');
            });
            
            $('#removeElement').click(function() {
                // 删除元素
                $('#insertContainer p:last').remove();
            });
            
            // 元素遍历示例
            $('#traverse').click(function() {
                var result = '';
                
                // 获取父元素
                result += '父元素: ' + $('.child:first').parent().prop('tagName') + '<br>';
                
                // 获取子元素
                result += '子元素数量: ' + $('.parent').children().length + '<br>';
                
                // 获取兄弟元素
                result += '第一个子元素的兄弟元素数量: ' + $('.child:first').siblings().length + '<br>';
                
                // 获取下一个兄弟元素
                result += '第二个子元素的下一个兄弟: ' + $('.child:eq(1)').next().text() + '<br>';
                
                // 获取上一个兄弟元素
                result += '第三个子元素的上一个兄弟: ' + $('.child:eq(2)').prev().text() + '<br>';
                
                $('#traverseResult').html(result);
            });
        });
    </script>
</body>
</html>

通过本章的学习,你应该掌握了如何使用 jQuery 进行各种 DOM 操作。在下一章中,我们将学习 jQuery 的事件处理机制。