2011-10-19 161 views
8

我的作家有一個壞習慣,創建空的段落。 (即,有在他們裏面什麼都沒有,喜歡的段落:用jQuery刪除「空」段落

<p></p> 

是否有一個jQuery的功能,消除「空」的段落這是我已經試過:

$('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 

別的我應該嘗試?

回答

18

$("p:empty").remove()作品對我來說(在http://jsfiddle.net/AndyE/XwABG/1/演示)。請確保您的元素實際上是空的,不包含任何空白。

你可以始終使用filter()

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

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

工作演示:http://jsfiddle.net/AndyE/XwABG/

+0

可能還用戶'this.innerHTML'或'$(本)的.text()' – Neal

+0

@Neal:切換到'this.innerHTML'表現。我的膝蓋反應通常用於文本,但這需要瀏覽器檢查或遞歸。 –

+0

謝謝安迪和尼爾。 –

0

使用。每次迭代所有段落和檢查innerHTML的空白,並刪除這些

2

我認爲這會工作與任何數量的空間(對不起,我不知道我是否瞭解段落中是否有空格):

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

如果你想安迪的回答擴展到非易碎空間 (並用細繩的裝飾()方法,而不是jQuery的),你可以使用:

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

這是老式的JavaScript,這是非常快:

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

這一個是更快:

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

如果空段落

然後fireeyedboy的號碼:空的選擇是要走的路: -

$('p').each(function() { 
    var $this = $(this); 
    if($this.html().replace(/\s|&nbsp;/g, '').length == 0) 
     $this.remove(); 
});