Удалить "пустые" абзацы с помощью 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--;
}
}
Если вы хотите расширить ответ Энди на неразрывные пространства (и используйте метод trim () строки вместо jQuery), вы можете использовать:
$('p').filter(function () {
return this.innerHTML
.replace(" "," ")
.trim()
== ""
}).remove();
если пустые абзацы
затем fireeyedboy п:пустой селектор является способом пойти :-$('p').each(function() {
var $this = $(this);
if($this.html().replace(/\s| /g, '').length == 0)
$this.remove();
});