2013-05-06 46 views
5

私は、次の入力があります。スパンをインプレイスで削除するにはどうすればよいですか?

<p> 
    <span class="highlight"> 
    Some text <b>that can have formatted components too</b>. 
    </span> 
    And some more text here of course. 
</p> 

をそして、私は次のような出力を達成したい:私はjqueryのを使用していますし、それが.unwrap()機能を持っているが、私は $('.highlight').unwrap()を行けば、それは削除さ

<p> 
    Some text <b>that can have formatted components too</b>. 
    And some more text here of course. 
</p> 

<p>。 :(

は手動でDOMをハッキングすることは面倒のように思える。あなたはどんな短いソリューションを知っていますか?

+0

'$テキスト());安全のために、' –

答えて

10

.contents()を使用すると、あなたが削除したい親要素の内部の要素を取得します。

$(".highlight").contents().unwrap(); 
+0

あなたは含めることができます( "ハイライト。 ")、親(" P ")HTML($(。。" ハイライト。")。 (希少)特殊ケース ''を処理するために '$("。highlight ")。remove();' unwrapはコンテンツを持たないため削除しません。 –

2

は、あなたは、単にjQueryのを使用してこれを行うことができ

$('.highlight').replaceWith(function() { 
    return $(this).html(); 
}); 
+0

これはうまくいきますが、Spokeyのソリューションよりもはるかに複雑です。 – Quentin

+0

「.replaceWith'、+1について教えてくれてありがとう。興味深いことに、replaceWithもコンテンツを持つノードでのみ機能します。 –

+0

(したがって、ここにも '$( '。highlight')を追加するとremove();'が提案されます、Spokeyの答えに関する私のコメントを参照してください) –

0

と交換してみてください。

ドキュメントへの
var cnt = $(".highlight").contents(); 

$(".highlight").replaceWith(cnt); 

クイックリンク:

+0

私はテストしましたが、強調表示される要素は1つだけです。 (そして、私がハイライトを1つしか持っていなかった場合は、id = "highlight"でマークしていたでしょう) –

関連する問題