2013-05-06 37 views
5

tôi có đầu vào sau:Làm thế nào để loại bỏ một nhịp tại chỗ?

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

Và tôi muốn đạt được kết quả như sau:

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

Tôi đang sử dụng jquery và nó có một chức năng .unwrap(), nhưng nếu tôi đi $('.highlight').unwrap() nó loại bỏ <p>. :(

thủ hack DOM có vẻ như một rắc rối. Bạn có biết bất kỳ giải pháp ngắn?

+0

'$ (". highlight "). parent (" p "). html ($ (". highlight "). text());' –

Trả lời

10

Với việc sử dụng .contents() bạn sẽ nhận được các yếu tố bên trong của phần tử cha mẹ bạn muốn loại bỏ.

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

Vì sự an toàn, bạn có thể bao gồm dòng thứ hai: '$ (". highlight "). remove();' để xử lý trường hợp đặc biệt (hiếm) ''. unwrap không loại bỏ nó bởi vì nó không có bất kỳ nội dung nào. –

2

thử thay bằng

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

Điều đó có hiệu quả, nhưng nó phức tạp hơn nhiều so với giải pháp của Spokey. – Quentin

+0

Cảm ơn bạn đã cho tôi biết về '.replaceWith', +1. –

+0

Điều thú vị là, replaceWith cũng chỉ hoạt động với các nút có nội dung. (Vì vậy, ở đây quá thêm '$ ('. Highlight'). Remove();' được đề xuất, xem bình luận của tôi về câu trả lời của Spokey) –

0

Bạn có thể chỉ đơn giản là có thể làm điều này bằng cách sử dụng jQuery.

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

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

liên kết nhanh đến tài liệu:

+0

Tôi đã thử nghiệm và nó chỉ hoạt động với một phần tử đơn được tô sáng. (và nếu tôi chỉ có một điểm nhấn duy nhất, tôi sẽ đánh dấu nó bằng id = "highlight" trong câu hỏi) –

Các vấn đề liên quan