您当前的位置: 首页 >  jquery

wespten

暂无认证

  • 2浏览

    0关注

    899博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

深入学习jquery源码之wrap()和wrapAll()

wespten 发布时间:2018-12-25 09:05:32 ,浏览量:2

深入学习jquery源码之wrap()和wrapAll()

wrap(html|element|fn)

概述

把所有匹配的元素用其他元素的结构化标记包裹起来。

这种包装对于在文档中插入额外的结构化标记最有用,而且它不会破坏原始文档的语义品质。这个函数的原理是检查提供的第一个元素(它是由所提供的HTML标记代码动态生成的),并在它的代码结构中找到最上层的祖先元素--这个祖先元素就是包裹元素。当HTML标记代码中的元素包含文本时无法使用这个函数。因此,如果要添加文本应该在包裹完成之后再行添加。

参数

html String

HTML标记代码字符串,用于动态生成元素并包裹目标元素

element Element

用于包装目标元素的DOM元素

fn Function

生成包裹结构的一个函数

把所有的段落用一个新创建的div包裹起来

$("p").wrap("
");

用原先div的内容作为新div的class,并将每一个元素包裹起来

Hello
Goodbye
$('.inner').wrap(function() {
  return '
'; });
Hello
Goodbye

 

wrapAll(html|ele)

概述

将所有匹配的元素用单个元素包裹起来

这于 '.wrap()' 是不同的,'.wrap()'为每一个匹配的元素都包裹一次。这种包装对于在文档中插入额外的结构化标记最有用,而且它不会破坏原始文档的语义品质。这个函数的原理是检查提供的第一个元素并在它的代码结构中找到最上层的祖先元素--这个祖先元素就是包装元素。

参数

html String 

TML标记代码字符串,用于动态生成元素并包装目标元素

elem Element

用于包装目标元素的DOM元素

用一个生成的div将所有段落包裹起来

$("p").wrapAll("
");

用一个生成的div将所有段落包裹起来

$("p").wrapAll(document.createElement("div"));

 

wrapInner(htm|element|fnl)

概述

将每一个匹配的元素的子内容(包括文本节点)用一个HTML结构包裹起来

这个函数的原理是检查提供的第一个元素(它是由所提供的HTML标记代码动态生成的),并在它的代码结构中找到最上层的祖先元素--这个祖先元素就是包装元素。

参数

html String

HTML标记代码字符串,用于动态生成元素并包装目标元素

element Element

用于包装目标元素的DOM元素

fn Function

生成包裹结构的一个函数

把所有段落内的每个子内容加粗

$("p").wrapInner("");

把所有段落内的每个子内容加粗

$("p").wrapInner(document.createElement("b"));

用原先div的内容作为新div的class,并将每一个元素包裹起来

Hello
Goodbye
$('.inner').wrapInner(function() {
  return '
'; });
Hello
Goodbye

 

unwrap()

概述

这个方法将移出元素的父元素。这能快速取消 .wrap()方法的效果。匹配的元素(以及他们的同辈元素)会在DOM结构上替换他们的父元素。

用ID是"content"的div将每一个段落包裹起来

Hello

cruel

World

$("p").unwrap()
    

Hello

cruel

World

 

jquery源码

    jQuery.fn.extend({
        wrapAll: function (html) {
            if (jQuery.isFunction(html)) {
                return this.each(function (i) {
                    jQuery(this).wrapAll(html.call(this, i));
                });
            }

            if (this[0]) {
                // The elements to wrap the target around
                var wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);

                if (this[0].parentNode) {
                    wrap.insertBefore(this[0]);
                }

                wrap.map(function () {
                    var elem = this;

                    while (elem.firstChild && elem.firstChild.nodeType === 1) {
                        elem = elem.firstChild;
                    }

                    return elem;
                }).append(this);
            }

            return this;
        },

        wrapInner: function (html) {
            if (jQuery.isFunction(html)) {
                return this.each(function (i) {
                    jQuery(this).wrapInner(html.call(this, i));
                });
            }

            return this.each(function () {
                var self = jQuery(this),
                    contents = self.contents();

                if (contents.length) {
                    contents.wrapAll(html);

                } else {
                    self.append(html);
                }
            });
        },

        wrap: function (html) {
            var isFunction = jQuery.isFunction(html);

            return this.each(function (i) {
                jQuery(this).wrapAll(isFunction ? html.call(this, i) : html);
            });
        },

        unwrap: function () {
            return this.parent().each(function () {
                if (!jQuery.nodeName(this, "body")) {
                    jQuery(this).replaceWith(this.childNodes);
                }
            }).end();
        }
    });

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

关注
打赏
1665965058
查看更多评论
立即登录/注册

微信扫码登录

0.0874s