2013-05-06 60 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> 

而且我想達到以下的輸出:

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

我使用jQuery和它有一個.unwrap()功能,但如果我去 $('.highlight').unwrap()它刪除<p>。 :(

手動黑客的DOM似乎是一個麻煩。你知道任何短期的解決方案?

+0

'$(。。 「亮點 」)父(「 P 」)HTML($(「 亮點」)文本());' – 2013-05-06 10:09:51

回答

10

隨着使用.contents()你會得到你想要刪除的父元素的內部元素。

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

爲安全起見,你可以包括第二行:'$( 「亮點 」)除去();'來處理(罕見)特例'<跨度類=「 亮點」>'。 unwrap不會將其刪除,因爲它沒有任何內容。 – 2013-05-06 10:28:54

2

嘗試

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

這很有效,但它比Spokey的解決方案複雜得多。 – Quentin 2013-05-06 10:08:51

+0

謝謝你讓我知道'.replaceWith',+1。 – 2013-05-06 10:15:35

+0

有趣的是,replaceWith也只適用於具有內容的節點。 (所以這裏也將'$()刪除()「亮點」。'建議,看到我對Spokey的答案評論) – 2013-05-06 10:32:01

0

代替你可以簡單地通過使用jQuery做到這一點。

var cnt = $(".highlight").contents(); 

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

快速鏈接到文件:

+0

元素我測試的,它只能有一個元素突出顯示。 (如果我只有一個亮點,我會在問題中用id =「highlight」標記它) – 2013-05-06 10:34:06