2011-10-19 28 views
8

Tác giả của tôi có thói quen xấu khi tạo các đoạn trống. (Ví dụ, đoạn văn mà không có gì bên trong chúng, như:Xóa các đoạn "trống" với jQuery

<p></p> 

Có một hàm jQuery mà loại bỏ đoạn "trống rỗng" Đây là những gì tôi đã cố gắng:.

$('p').remove(":contains(' ')"); // nope! bad logic, all p's have empty spaces 

$("p:empty").remove() // nope, doesn't work, doesn't remove any p's 

Bất cứ điều gì khác tôi nên thử ?

Trả lời

18

$("p:empty").remove() công trình đối với tôi (demo tại http://jsfiddle.net/AndyE/XwABG/1/). Hãy chắc chắn rằng các yếu tố của bạn đang thực sự trống rỗng và không chứa bất kỳ khoảng trắng.

bạn có thể luôn luôn sử dụng filter():

// Trimming white space 
$('p').filter(function() { return $.trim(this.innerHTML) == "" }).remove(); 

// Without trimming white space 
$('p').filter(function() { return this.innerHTML == "" }).remove(); 

bản demo làm việc: http://jsfiddle.net/AndyE/XwABG/

+0

có thể cũng dùng 'this.innerHTML' hoặc '$ .text (this)()' – Neal

+0

@Neal: chuyển sang 'this.innerHTML' để thực hiện. Phản ứng đầu gối của tôi thường là để đi cho văn bản, nhưng điều đó đòi hỏi phải kiểm tra trình duyệt hoặc đệ quy. –

+0

Cảm ơn Andy và Neal. –

0

Sử dụng .each để lặp qua tất cả các đoạn văn bản và kiểm tra innerHTML rỗng và loại bỏ những

2

Tôi nghĩ rằng điều này sẽ làm việc với bất kỳ số lượng khoảng trống nào (xin lỗi, tôi không chắc mình đã hiểu liệu có khoảng trống trong các đoạn văn hay không):

$("p").each(function(){ 
    if ($.trim($(this).text()) == ""){ 
    $this.remove(); 
    } 
}); 
0

Nếu bạn muốn mở rộng câu trả lời của Andy để không gian không vỡ (và sử dụng cắt chuỗi() của phương pháp thay vì jquery của), bạn có thể sử dụng:

$('p').filter(function() { 
    return this.innerHTML 
     .replace("&nbsp;"," ") 
     .trim() 
     == "" 
}).remove(); 
0

Đây là đồng bằng cũ JavaScript và nó rất nhanh:

[].filter.call(document.getElementsByTagName("p"), function(elem){return elem.childElementCount==0 && elem.textContent.trim()==''}) 
    .forEach(function(elem){elem.parentNode.removeChild(elem)}) 

Cái này thậm chí còn nhanh hơn:

var paragraphs = document.getElementsByTagName("p"); 
for (var i = 0, len = paragraphs.length; i < len; i++) { 
    var elem = paragraphs[i]; 
    if (elem.childElementCount == 0 && elem.textContent.trim() == '') { 
     elem.parentNode.removeChild(elem); 
     i--; 
     len--; 
    } 
} 
0

Nếu các đoạn trống là

sau đó p fireeyedboy của: trống chọn là con đường để đi: -

$('p').each(function() { 
    var $this = $(this); 
    if($this.html().replace(/\s|&nbsp;/g, '').length == 0) 
     $this.remove(); 
}); 
Các vấn đề liên quan