2013-04-02 9 views
11

これは自分のhtmlです。選択した要素のラップ解除JavascriptまたはJquery

<span id="current" class="green unselctable" data-original-title="" title=""> 
    Lorem Ipsum is simply dummy 
</span> 

私は$("#current")として選択するんだけど、私はjQueryのアンラップ機能を使用する場合は、親タグが削除されます。

文字列を解析してDOMに追加することなく、JavaScriptまたはjQueryでスパンを削除する方法はありますか?

私はdivの内容を保持したいと思います。タグを削除したいだけです。

+2

「Lorem ...」がまだ存在するようにしますか? – vol7ron

+0

いいえ、別のラッパーを追加せずに、選択された要素の中のすべてのhtml – trebor

答えて

29

あなたはunwrap()にチェーンcontents()ことができます。

$("#current").contents().unwrap(); 

contents()は、テキストノードを含め、#currentのすべての子を返し、unwrap()は、ノードをテキストに適用することができます。

+0

非常に良い - 選択された回答にする必要があります – vol7ron

+1

@ vol7ronそれは9分で、両方のあなたに感謝多くのです – trebor

+0

[テスト] http://jsperf.com/unwrap-vs-replacewith)replaceWithは高速ですが、明快にするために、私はアンラップが良いと思います。 – vol7ron

4
var $current = $('#current'); 
$current.replaceWith($current.text()); 

Fiddle現在の2つの回答 - pun?

unwrap vs replaceWith

+0

私の2セント:Questionerは '文字列を解析せずにDOMに追加する 'と言い、' replaceWith() 'に文字列を渡すとまったく同じことが言えます。それでも、 'text()'ではなく 'html()'を使うと、( ' 'に他の要素が含まれていると)より良い答えになるかもしれません。つまり、あなたのソリューションはおそらく私より速いですね: –

+1

textnodeをプルすると、本当に解析されますか? :)ハハ、しかしはい。私はどちらのインスタンスでもコピー/追加が行われていると思う - 私はしばらくのうちにjqソースを見ていない – vol7ron

-1

ただ、この同じ質問をヒット。私はこれが少し上手くいくかもしれないと思う...同じ効果があるが、私はjQueryがこの仕事をするためにあまりマジックをしていないと思う。

$("#current").replaceWith($("#current").contents());