jQuery 文档处理:包裹 - 将元素或元素内容包裹在容器中

🎉摘要:本章将介绍 jQuery 的包裹方法,包括 wrap()/unwrap()、wrapAll()、wrapInner() 等方法的语法及示例。清晰区分 jQuery 文档处理中元素包裹、内部包裹与移除包裹的实现方式,新手也能快速上手。

jQuery 的包裹方法用于为匹配元素添加外层 / 内层包裹容器(修改 DOM 结构),核心包含 wrap、unwrap、wrapAll、wrapInner 四类方法,常用于批量修改元素结构、美化样式、分组元素等场景,下面将通过代码示例逐一讲解。

包裹方法

wrap(html|ele|fn)

用于为每个匹配的元素分别包裹一层指定的容器(每个元素都有独立的外层)。语法:

$(目标元素).wrap(包裹容器)

参数:

  • html:HTML 字符串(如 <div class="wrapper"></div>)。

  • ele:DOM 元素 /jQuery 对象。

  • fn(index):回调函数,返回要包裹的容器(index为元素索引)。

示例:

<div class="container">
    <div class="inner">Hello</div>
    <div class="inner">Goodbye</div>
</div>

运行代码:

$('.inner').wrap('<div class=\'wrap\'></div>')

将所有类为 inner 的元素包裹到 <div class='wrap'></div> 元素中,效果如下:

<div class="container">
    <div class="wrap"><div class="inner">Hello</div></div>
    <div class="wrap"><div class="inner">Goodbye</div></div>
</div>

unwrap()

用于移除匹配元素的直接父容器(wrap的反向操作),注意:不会移除 <body>/<html> 等根元素。语法:

$(目标元素).unwrap()

示例:

<div class="container">
    <div class="wrap"><div class="inner">Hello</div></div>
    <div class="wrap"><div class="inner">Goodbye</div></div>
</div>

运行代码:

$('.inner').unwrap()

将移除所有类为 inner 元素的直接父容器,效果如下图:

<div class="container">
    <div class="inner">Hello</div>
    <div class="inner">Goodbye</div>
</div>

wrapAll(html|ele)

用于将所有匹配的元素包裹在同一个容器中(所有元素共享一个外层,区别于 wrap的“每个独立包裹”)。语法:

$(目标元素).wrapAll(包裹容器)

参数:

  • html:HTML 字符串(如 <div class="wrapper"></div>)。

  • ele:DOM 元素 /jQuery 对象。

  • fn(index):回调函数,返回要包裹的容器(index为元素索引)。

示例:

<div class="container">
    <div class="inner">Hello</div>
    <div class="inner">Goodbye</div>
</div>

运行代码:

$('.inner').wrapAll('<div class=\'wrap\'></div>')

将所有类为 inner 的元素全部包裹在同一个 <div class='wrap'></div> 元素中,效果如下:

<div class="container">
    <div class="wrap">
        <div class="inner">Hello</div>
        <div class="inner">Goodbye</div>
    </div>            
</div>

wrapInner(html|ele|fn)

为每个匹配元素的内部内容包裹一层容器(包裹子内容,而非元素本身)。语法:

$(目标元素).wrapInner(包裹容器)

参数:

  • html:HTML 字符串(如 <div class="wrapper"></div>)。

  • ele:DOM 元素 /jQuery 对象。

  • fn(index):回调函数,返回要包裹的容器(index为元素索引)。

示例:

<div class="container">
    <div class="inner">Hello</div>
    <div class="inner">Goodbye</div>
</div>

运行代码:

$('.inner').wrapInner('<div class=\'wrap\'></div>')

将所有类为 inner 的元素的内容使用 <div class='wrap'></div> 进行包裹,效果如下:

<div class="container">
    <div class="inner"><div class="wrap">Hello</div></div>
    <div class="inner"><div class="wrap">Goodbye</div></div>
</div>

完整示例

下面示例通过“点击自己动手试一试”可以尝试各种方法的效果:

示例:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JQeury 教程</title>
    <!-- 引入 jQuery 库 -->
    <script type="text/javascript" src="https://www.hxstrive.com/cdn/libs/jquery/3.7.1/jquery.min.js"></script>
    <!-- 引入 loglevel 库,方便在 DOM 中打印日志 -->
    <script src="https://www.hxstrive.com/preview_code/libs/custom_loglevel.js"></script>
    <style>
        button { background: #EEE !important; border: 1px solid #ccc !important; 
            min-width: 40px; padding: 5px; margin: 5px; cursor: pointer; }
        h3 { font-size: 18px; }
        .container { border: 1px solid blue; padding: 10px; }
        .inner { border: 1px solid red; padding: 10px; margin: 5px; }
        .wrap { box-shadow: inset 0 0 3px green; padding: 5px; margin: 5px; }
    </style>
</head>
<body>

    <div class="app">
        <h3>包裹</h3>
        <div class="container">
            <div class="inner">Hello</div>
            <div class="inner">Goodbye</div>
        </div>
    </div>

    <div>
        <!-- wrap(html|ele|fn) 把所有匹配的元素用其他元素的结构化标记包裹起来 -->
        <button type="button" onclick="
                // 将 class 为 inner 的元素包裹在 class 为 wrap 的 div 中
                $('.inner').wrap('<div class=\'wrap\'></div>');
            ">wrap(html|ele|fn)</button>

        <!-- unwrap() 这个方法将移出元素的父元素 -->
        <button type="button" onclick="
                // 移除 class 为 inner 的元素的所有父级元素
                $('.inner').unwrap();
            ">unwrap()</button>

        <!-- wrapAll(html|ele) 将所有匹配的元素用单个元素包裹起来 -->
        <button type="button" onclick="
                // 将所有 class 为 inner 的元素包裹在同一个 div 中
                $('.inner').wrapAll('<div class=\'wrap\'></div>');
            ">wrapAll(html|ele)</button>

        <!-- wrapInner(html|ele|fn) 将每一个匹配的元素的子内容(包括文本节点)用一个HTML结构包裹起来 -->
         <button type="button" onclick="
                // 将每个 class 为 inner 的元素的内容包裹在 div 中
                $('.inner').wrapInner('<div class=\'wrap\'></div>');
            ">wrapInner(html|ele|fn)</button>
    </div>
    
</body>
</html>

看看效果👉自己动手试一试 »

更多关于 jQuery 的知识请阅读后续教程。

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号