Удалить "пустые" абзацы с помощью 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

что еще я должен попробовать?

6 ответов


$("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/


Я думаю, что это будет работать с любым количеством пробелов (извините, я не уверен, что понял, были ли пробелы в абзацах или нет):

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

это простой старый 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--;
    }
}

использовать .каждый, чтобы перебрать все абзацы и проверить innerHTML пустым и удалить те


Если вы хотите расширить ответ Энди на неразрывные пространства (и используйте метод trim () строки вместо jQuery), вы можете использовать:

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

если пустые абзацы

затем fireeyedboy п:пустой селектор является способом пойти :-
$('p').each(function() {
    var $this = $(this);
    if($this.html().replace(/\s|&nbsp;/g, '').length == 0)
        $this.remove();
});