问题在于
.closest()
是分层传播的。
您可以使用 jQuery 的
:not
和 :has
选择器排除 .post
元素,然后在其中搜索要删除的 <p>
标签。
您还可以使用
p:nth-child(n+2)
选择器来定位每个块中第一个之后的每个 <p>
标签。
$('.post:not(:has(a[name=123])) .post-body p:nth-child(n+2)').remove();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<div class="post">
<a name="123"></a>
<h3 class="post-title">Post</h3>
<div class="NewPermalinkUrl">Text</div>
<div class="post-body">
<p>Content</p>
<p>Not removed</p>
</div>
</div>
<div class="post">
<a name="456"></a>
<h3 class="post-title">Post</h3>
<div class="NewPermalinkUrl">Text</div>
<div class="post-body">
<p>Content</p>
<p>To be removed</p>
</div>
</div>
<div class="post">
<a name="789"></a>
<h3 class="post-title">Post</h3>
<div class="NewPermalinkUrl">Text</div>
<div class="post-body">
<p>Content</p>
<p>To be removed</p>
</div>
</div>