我有一个包含文本的页面,但某些容器有空的段落标签,每个标签都在末尾。重要的是,我不要在文本结束后删除内容之间的任何内容。我对此的想法是首先循环遍历容器,然后以相反的顺序检查所有段落标签,删除与正则表达式匹配的任何内容,当它遇到某些内容时 - 继续到下一个元素。我为此创建了一个 jsfiddle,但它仅将它们从最后一个面板中删除。
jquery
$(document).ready(function() {
$(".content").each(function() {
$($("p").get().reverse()).each(function() {
var $this = $(this);
if ($this.html().replace(/\s| /g, '').length == 0) {
$this.remove();
}
else {
return false;
}
});
});
});
HTML
<div class="content">
<p>Blah</p>
<p> </p>
<p> </p>
<p>Another Paragraph I want to keep</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
</div>
<div class="content">
<p>Blah</p>
<p> </p>
<p> </p>
<p>Another Paragraph I want to keep</p>
<p> </p>
<p> </p>
</div>
<div class="content">
<p>Blah</p>
<p> </p>
<p> </p>
<p>Another Paragraph I want to keep</p>
<p> </p>
<p> </p>
<p>another paragraph</p>
<p> </p>
<p> </p>
<p> </p>
</div>
https://jsfiddle.net/659Lejgz/1/
我感觉自己离自己很近,但又遥不可及。任何帮助都会非常好!
最佳答案
您需要更改$($("p").get().reverse()).each(function() {
至:$($(this).find("p").get().reverse()).each(function() {
实际上,当发生在原始代码中时,虽然我们循环遍历 .content
元素,但在循环的每次迭代中,我们都会查询 p
元素整个文档的上下文,并且由于我们反转结果,因此我们总是获得最后一个 .content
元素的最后一个 p
元素。
通过将 $("p")
更改为 $(this).find("p")
,我们强制 jQuery 搜索 p
元素仅位于我们当前正在迭代的 .content
元素内。
关于javascript - 反向删除空段落并移至下一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37704537/