Удалить ближайших пустых братьев и сестер

Допустим, у меня есть следующая разметка:

<p></p>
<p>not empty</p>
<p>not empty</p>
<p></p>
<div class="wrapper">
    // more content inside
</div>
<p>  </p> <-- whitespace, also removed
<p></p>
<p>not empty</p>

Как убрать пустое <p> теги, ближайшие к .wrapper? Я хочу такой результат:

<p></p>
<p>not empty</p>
<p>not empty</p>
<div class="wrapper">
    // more content inside
</div>
<p>not empty</p>

Поэтому я не хочу удалять все пустые братья и сестры, только пустые рядом с .wrapper, даже если их несколько.

2 ответа

Решение

Ты можешь использовать .prevUntil/.nextUntil в сочетании с :not(:empty) селектор: http://jsfiddle.net/vEtv8/5/.

$("div.wrapper")
    .​​​​​​​​​​nextUntil(":not(p), :not(:empty)").remove().end()
    .prevUntil(":not(p), :not(:empty)").remove();

:empty однако, пробельные элементы не считаются пустыми. Вы можете использовать функцию для этого: http://jsfiddle.net/vEtv8/4/.

var stopPredicate = function() {
    var $this = $(this);
    return !$this.is("p") || $.trim($this.text()) !== "";
};

$("div.wrapper")
    .nextUntil(stopPredicate).remove().end()
    .prevUntil(stopPredicate).remove();
$('.wrapper').prevAll('p:empty').nextAll('p:empty').remove();
Другие вопросы по тегам