$(fuga).wrap($boga)した後$bogaに何かしても反映されない
タイトルだけやとよくわからんですが・・・
wrap()メソッドは全然使ったことがなくて、なんとなく使ってみたらうっかりはまった例です。よくよく考えたらその通りなのでただのうっかりです・・・
wrap()メソッドについて
一応ふれておくとwrap()メソッドを使うと、対象のjQueryオブジェクトを指定したタグか要素で包めます。
$(boga).wrap("");
とかすると
boga
になります。このwrapする要素はタグではなくてjQueryオブジェクトでも大丈夫なんですけど、
何がだめなのか
var $boga = $("");
// これは大丈夫
$boga.method(/* something */);
$(fuga).wrap($boga);
// これはだめ
$boga.method(/* something */);
結論から言うと、次みたいに$hogeを再取得しないとだめです。(そもそもreplaceWithとかのほうがいいかもとかは置いといて)
var $boga = $("");
// これは大丈夫
$boga.method(/* something */);
// wrapした後、親に移動してそれを $hoge に返す
// つまり元の$hogeを再取得する
$boga = $(fuga).wrap($boga).parent();
// これも当然大丈夫
$boga.method(/* something */);
何がどうなってるの
wrap()メソッド自体はほぼそのままwrapAllに渡してるだけなんですけど
wrap: function( html ) {
return this.each(function() {
jQuery( this ).wrapAll( html );
});
}
下にコメントで書いたように、wrapAll()メソッドでwrapする要素はclone()メソッドで複製したものなので、元の$bogaにあれやこれやしようとしても、そもそも$bogaでwrapされているわけではないのでどうしようもない、ということでした。
wrapAll: function( html ) {
// 略
if ( this[0] ) {
// The elements to wrap the target around
var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
// ↑ 実際に追加されるのは html ではなく html を複製したもの
if ( this[0].parentNode ) {
wrap.insertBefore( this[0] );
// ↑ 複製したものを追加している
}
wrap.map(function() {
// 略
}).append( this );
}
return this;
}
カレー
たべたい



