提供wrap、wrapAll、wrapInnner、unWrap方法,外部包裹、内部包裹、或移除父级包裹元素
define([ "./core", "./core/init", "./manipulation", // clone "./traversing" // parent, contents ],function(jQuery){ jQuery.fn.extend({ // 只能针对单个元素,wrap方法可以是多个元素 // html可以是选择器,将拷贝页面上的元素用来包裹当前元素,被拷贝对象在页面既有两份 // 或html字符串,形成dom元素插在当前元素前头,在把当前元素用循环语句插入该dom最底层 wrapAll:function(html){ var wrap; if ( this[0] ){ if ( jQuery.isFunction(html) ){ html=html.call(this[0]); } 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.firstElementChild ){ elem=elem.firstElementChild; } return elem; }).append(this); } return this; }, // 当前元素的子元素使用html包裹 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); }); }, // 移除匹配selector的父节点 unwrap:function(selector){ this.parent(selector).not("body").each(function(){ jQuery(this).replaceWith(this.childNodes); }); return this; } }); return jQuery; });