var Wrap = function(html){//html は要素ノードまたは HTML フラグメントにすることができます。
var _wrap = function(target,html){
var Wrap = html; if(!wrap.nodeType){
if(doc.createRange){
var range=doc.createRange();
range.selectNodeContents(target);
wrap = range.createContextualFragment( html) ).firstChild;
}else{
wrap = dom.parseHTML(html,null,true).firstChild
}
}else{
wrap = html.cloneNode(true)
}
target.parentNode.replaceChild(wrap,target);
while (wrap.firstChild && Wrap.firstChild.nodeType === 1 ) {
wrap = Wrap.firstChild>}
wrap.insertBefore(target,null)
}
if(is(html,"Function")){
return this.each(function(el,index){
_wrap( el , html.call(el,index));
})
}
return this.each(function(el){
_wrap(el,html)
}); 🎜>}
//一致する各要素の子ノードを何かでラップします。
var WrapInner = function(html){
var _wrap = function(target,html){
var Wrap = html ;
if(!wrap.nodeType){
wrap = dom.parseHTML(html,null,true).firstChild
}else{
wrap = html.cloneNode(true)
}
target.insertBefore(wrap,target.firstChild);
while (wrap.firstChild && Wrap.firstChild.nodeType === 1 ) {
wrap = Wrap.firstChild>}
(var i=1,n=target.childNodes.length;iwrap.appendChild(target.childNodes[i],null)
}
}
if( is(html,"関数")){
return this.each(function(el,index){
_wrap(el, html.call(el,index));
} ); >}
return this.each(function(el){
_wrap(el,html)
});
}
// 一致する要素をすべてタグ
でラップします/メソッド: 最初に一致した要素に親要素 (ラッパー) を追加し、その後、他の一致する要素をこの親要素に転送します
//wrapAll(html) WrapAll(elem)
var WrapAll = function(html){
var Wrap = html;
if(!wrap.nodeType){
if(doc.createRange){
var range = doc.createRange(); 0]);
wrap = range.createContextualFragment(html).firstChild;
}else{
wrap = dom.parseHTML(html,null,true).firstChild
}
} {
wrap = html.cloneNode(true)
}
this[0].parentNode.replaceChild(wrap,this[0])
while (wrap.firstChild &&wrap.firstChild.nodeType === 1 ) {
wrap = Wrap.firstChild;
}
return this.each(function(el){
wrap.insertBefore(el, null);
});
}
重複したコードがたくさんあることがわかり、もう少し抽象化すると、外部の人にはまったく理解できなくなります。jQuery もこれを段階的に実行しているのだと思います。不明瞭なものへ。
コードをコピー
if(document.createRange){ var range= dom.doc.createRange();
range.selectNodeContents(target);
wrap = range.createContextualFragment(html).firstChild;
wrap = dom.parseHTML( html,null ,true).firstChild
}
}else{
wrap = html.cloneNode(true)
}
var insertor = Wrap
while ( insertor.firstChild && insertor.firstChild .nodeType === 1 ) {
insertor = insertor.firstChild;
}
return [wrap,insertor]
}
// 一致する要素をすべてタグ / /メソッド: 最初に一致した要素に親要素 (ラッパー) を追加し、その後、他の一致する要素をこの親要素に転送します
//wrapAll(html) WrapAll(elem)
var WrapAll = function( html){
if ( dom.isFunction( html ) ) {
return this.each(function(el,index) {
dom(this).wrapAll( html.call(this,index)) ;
});
}
var arr = WrapHelper(this[0],html);
var Wrap = arr[0],insertor =arr[1]; 0].parentNode.replaceChild(wrap,this[0]);
return this.each(function(el){
insertor.insertBefore(el,null);
});
//親要素 (ラップされた要素) を一致する各要素に追加します。
var Wrap= function( html ) {
return this.each(function() {
dom( this ).wrapAll ( html );
});
}
// 一致する各要素の子ノードを何かでラップします
var WrapInner = function(html){
var _wrap = function(target, html){
var arr = WrapHelper(target,html);
var Wrap = arr[0],insertor =arr[1];
target.insertBefore(wrap, target.firstChild); >for(var i=1,n=target.childNodes.length;iinsertor.appendChild(target.childNodes[i],null)
}
}
if(is(html,"Function")){
return this.each(function(el,index){
_wrap(el, html.call(el,index)) ;
});
}
return this.each(function(el){
_wrap(el,html)
});
}
return {
wrapAll:wrapAll,
wrap:wrap,
wrapInner:wrapInner
}
})());
unwrap メソッドについては後で説明します。