删除空 <p>,但每组只允许一个
Remove empty <p>, but allow only one per group
我想知道如何删除空元素,但是每组只允许一个空元素(在非空元素旁边) ?
类似于:
示例 HTML :
<p>Hello world</p>
<p><br></p>
<p><br></p> <!--This will remove-->
<p><br></p> <!--This will remove-->
<p>Lorem ipsum dolor sit amet</p>
<p><br></p>
<p><br></p> <!--This will remove-->
<p>Eum ne nostro admodum</p>
<p><br></p>
和jQuery用于检查空元素:
var p_empty = $('p').filter(function(i,v){return $.trim($(v).text()).length===0;});
现在我得到了所有空元素,但是知道如何删除下一个空元素吗?
工作流程: http://jsfiddle.net/jmy0uzw1/
PS: 我也在寻找好的 JS 性能
在你的情况下,因为你没有使用容器,你将不得不使用兄弟选择器 +
并确保前面的 p
元素本身不是 .empty
$('p.empty:not(p:not(.empty) + p.empty)').remove();
var p_empty = $('p').filter(function(i, v) {
return $.trim($(v).text()).length === 0;
});
p_empty.addClass('empty');
$('p.empty:not(p:not(.empty) + p.empty)').remove();
p {
padding: 3px 10px;
background: #eee;
color: #999;
font-size: 12px;
line-height: 12px;
}
p.empty {
border: 1px dashed #fff;
background: #edd;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<p>Hello world</p>
<p>
<br>
</p>
<p>
<br>
</p>
<p>
<br>
</p>
<p>Lorem ipsum dolor sit amet</p>
<p>
<br>
</p>
<p>
<br>
</p>
<p>Eum ne nostro admodum</p>
<p>
<br>
</p>
只需添加更多过滤器即可
var p_empty = $('p').filter(function(i,v){
return $.trim($(v).text()).length===0 && $.trim($(v).prev().text()).length===0;
});
var p_empty = $('p').filter(function(i, v) {
return $.trim($(v).text()).length === 0;
});
p_empty.addClass('empty');
$('p.empty + p.empty').remove();
p {
padding: 3px 10px;
background: #eee;
color: #999;
font-size: 12px;
line-height: 12px;
}
p.empty {
border: 1px dashed #fff;
background: #edd;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Hello world</p>
<p>
<br>
</p>
<p>
<br>
</p>
<p>
<br>
</p>
<p>Lorem ipsum dolor sit amet</p>
<p>
<br>
</p>
<p>
<br>
</p>
<p>Eum ne nostro admodum</p>
<p>
<br>
</p>
试试这个:
$('p.empty + p.empty').remove();
完整代码
var p_empty = $('p').filter(function(i, v) {
return $.trim($(v).text()).length === 0;
});
p_empty.addClass('empty');
$('p.empty + p.empty').remove();
我想知道如何删除空元素,但是每组只允许一个空元素(在非空元素旁边) ?
类似于:
示例 HTML :
<p>Hello world</p>
<p><br></p>
<p><br></p> <!--This will remove-->
<p><br></p> <!--This will remove-->
<p>Lorem ipsum dolor sit amet</p>
<p><br></p>
<p><br></p> <!--This will remove-->
<p>Eum ne nostro admodum</p>
<p><br></p>
和jQuery用于检查空元素:
var p_empty = $('p').filter(function(i,v){return $.trim($(v).text()).length===0;});
现在我得到了所有空元素,但是知道如何删除下一个空元素吗?
工作流程: http://jsfiddle.net/jmy0uzw1/
PS: 我也在寻找好的 JS 性能
在你的情况下,因为你没有使用容器,你将不得不使用兄弟选择器 +
并确保前面的 p
元素本身不是 .empty
$('p.empty:not(p:not(.empty) + p.empty)').remove();
var p_empty = $('p').filter(function(i, v) {
return $.trim($(v).text()).length === 0;
});
p_empty.addClass('empty');
$('p.empty:not(p:not(.empty) + p.empty)').remove();
p {
padding: 3px 10px;
background: #eee;
color: #999;
font-size: 12px;
line-height: 12px;
}
p.empty {
border: 1px dashed #fff;
background: #edd;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<p>Hello world</p>
<p>
<br>
</p>
<p>
<br>
</p>
<p>
<br>
</p>
<p>Lorem ipsum dolor sit amet</p>
<p>
<br>
</p>
<p>
<br>
</p>
<p>Eum ne nostro admodum</p>
<p>
<br>
</p>
只需添加更多过滤器即可
var p_empty = $('p').filter(function(i,v){
return $.trim($(v).text()).length===0 && $.trim($(v).prev().text()).length===0;
});
var p_empty = $('p').filter(function(i, v) {
return $.trim($(v).text()).length === 0;
});
p_empty.addClass('empty');
$('p.empty + p.empty').remove();
p {
padding: 3px 10px;
background: #eee;
color: #999;
font-size: 12px;
line-height: 12px;
}
p.empty {
border: 1px dashed #fff;
background: #edd;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Hello world</p>
<p>
<br>
</p>
<p>
<br>
</p>
<p>
<br>
</p>
<p>Lorem ipsum dolor sit amet</p>
<p>
<br>
</p>
<p>
<br>
</p>
<p>Eum ne nostro admodum</p>
<p>
<br>
</p>
试试这个:
$('p.empty + p.empty').remove();
完整代码
var p_empty = $('p').filter(function(i, v) {
return $.trim($(v).text()).length === 0;
});
p_empty.addClass('empty');
$('p.empty + p.empty').remove();