Удалить ближайших пустых братьев и сестер
Допустим, у меня есть следующая разметка:
<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();