2013-05-06 15 views
5

Mam następujące dane wejściowe:Jak usunąć rozpiętość w miejscu?

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

I chcę osiągnąć następujące wyniki:

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

używam jQuery i ma .unwrap() funkcji, ale jeśli pójdę $('.highlight').unwrap() usuwa <p>. :(

Ręcznie hacking DOM wydaje się kłopotów. Czy znacie jakieś krótkie rozwiązanie?

+0

'$ (... "Highlight ") rodzic (" P ") html ($ (". Punktem kulminacyjnym") tekst());' –

Odpowiedz

10

Z wykorzystaniem .contents() dostaniesz elementy wewnątrz elementu nadrzędnego, który chcesz usunąć.

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

Dla bezpieczeństwa można obejmują druga linia: '$ (" highlight "). remove();' aby obsłużyć (rzadko) specjalny przypadek ''. odwijaj nie usuwa go, ponieważ nie ma żadnej zawartości. –

2

spróbować zastąpić

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

To działa, ale jest o wiele bardziej skomplikowane niż rozwiązanie Spokey. – Quentin

+0

Dzięki za poinformowanie mnie o '.replaceWith', +1. –

+0

Co ciekawe, replaceWith również działa tylko z węzłami, które mają zawartość. (Tak więc tutaj również dodanie '$ ('. Highlight'). Remove();' zasugerowano, zobacz mój komentarz do odpowiedzi Spokeya) –

0

można po prostu może to zrobić za pomocą jQuery.

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

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

Szybkie linki do dokumentacji:

+0

Testowałem i działa tylko z podświetlonym jednym elementem. (i gdybym miał tylko jedną atrakcję, oznaczałbym ją przez id = "highlight" w pytaniu) –