要素をアンラップするには、親が必要です。DOM フラグメントを作成し、それをアンラップしようとしています。しかし、それには両親がいません。
いくつかのdomがあるとしましょう:
<button>unwrap</button>
<div class="outer"></div>
親が配置されていれば、アンラップはうまくいきます:
var inner = '<span class="inner">test html</span>',
$outer = $('.outer');
// First you would want your element to get a parent.
$outer.html(inner);
// Then unwrap it
$('button').on('click', function() {
$('.inner').unwrap();
});
ここにフィドルがあります
したがって、外側のスパンを削除する場合は、内側のスパンをターゲットにする必要があります。これにより、ラップが解除されます。
更新されたフラグメントの場合:
.clone() は親をコピーせず、要素とそのすべての子孫のみをコピーします。したがって、クローンを使用すると、選択した要素にルートを持つ別のフラグメントが構築されます。
.unwrap() は、一致した要素の親を削除します。したがって、内側のスパンをアンラップするには、jQuery で選択する必要があります。
<div class="outer"></div>
js
var html = "<span><span class='inner'>test html </span></span>";
var $html = $(html);
var unwraped = $html.find('.inner').unwrap();
$('.outer').html(unwraped);
別のフィドル
更新:
DOM をトラバースすることとそれを変更することには違いがあります。.find() を使用すると、トラバースします (要素から要素へ移動します)。DOM ツリーの構造は変わりません。.unwrap() を使用すると、構造が変更されます (DOM から要素が削除されます)。