2009-10-15 30 views
22

Có cách nào để loại bỏ văn bản mà không được bọc trong bất kỳ thẻ sử dụng jQueryRemove văn bản với jQuery

<p>This is some text</p> 

This is "unwrapped" text //to be removed 

<span>some more text</span> 

Cảm ơn bạn đã giúp đỡ của bạn

+2

Tất cả văn bản được bao bọc trong một số thẻ, ngay cả khi đó là - ý của bạn có phải là trong phần tử vùng chứa cụ thể không? – Greg

+0

+1 cho , suy nghĩ giống nhau. –

Trả lời

41

Sử dụng câu trả lời từ this question:

$(elem) 
    .contents() 
    .filter(function() { 
    return this.nodeType == 3; //Node.TEXT_NODE 
    }).remove(); 
+2

Có, hàm tạo hàm 'Node' không được bắt buộc phải hiển thị ở cấp' cửa sổ', và 'TEXT_NODE' thường chỉ được tìm thấy trên nguyên mẫu, chứ không phải hàm tạo. Cách ‘chính xác’ sẽ là 'this.nodeType == this.TEXT_NODE', tuy nhiên, điều đó vẫn không hoạt động trên IE, vì vậy thông thường bạn phải định nghĩa' var TEXT_NODE = 3; 'của riêng bạn. – bobince

8

Trước tiên, bạn có thể bọc chúng bằng nhịp giả:

$("body").contents() 
    .filter(function(){ return this.nodeType != 1; }) 
    .wrap("<span class='orphan'/>"); 

Bây giờ bạn có thể loại bỏ chúng một cách dễ dàng:

$('span.orphan').remove(); 
1

gói nó trong một phần tử DOM có nghĩa là jQuery có thể tìm thấy nó:

ví dụ:

var text = 'This is "unwrapped" text'; 

$("div:contains('" + text + "')").remove(); 

hoặc chỉ:

$('p').next().remove(); 
2

fwiw ..

<div class="parent-element"> 
<p>This is some text</p> 
This is "unwrapped" text //to be removed 
<span>some more text</span> 
</div> 

qua CSS:

.parent-element { font-size: 0px; } 
.parent-element p { font-size: 12px; } 
.parent-element span { font-size: 14px; } 
+2

OP yêu cầu một giải pháp trong jQuery. Câu trả lời của bạn không sử dụng jQuery. – Pang

1

Thật ngạc nhiên nhưng đồng thời các mã sau đây không hoạt động

$("div.myClass:has(img)").contents().filter(":text").remove(); 

và mã từ bài viết đầu tiên làm việc

$("div.myClass:has(img)") 
    .contents() 
    .filter(function() { 
    return this.nodeType == 3; //Node.TEXT_NODE 
    }).remove(); 

Điều quan trọng là phải nhớ lại! jQuery 1.8.3.

Và trước hết tôi nhớ rằng thao tác bên trong HTML hoạt động nhanh hơn nhiều so với cách tiếp cận này!

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