如何排除含name="123"锚点的div,保留其所有<p>标签?
问题解决:保留指定
.post容器内的所有<p>标签 需求明确:
- 移除所有
.post-body容器中,除第一个<p>外的所有<p>标签 - 例外情况:如果外层
.post容器内包含name="123"的锚点<a>,则该容器下的.post-body内的所有<p>都保留
之前代码的问题分析
- 第一段代码用
$(this).find('a[name="123"]'):.post-body的子元素里没有目标锚点<a>,它在.post-body的父级.post下,所以find无法匹配到,导致逻辑错误。 - 第二段代码用
$(this).closest('[name="123"]'):closest仅查找当前元素及祖先元素,但name="123"的是<a>标签,并非.post-body的祖先节点,因此永远匹配不到,逻辑失效。
正确的实现代码
$('.post-body').each(function() { const $postBody = $(this); // 定位到当前.post-body所属的外层.post容器,检查其中是否存在name="123"的锚点 const hasAnchor123 = $postBody.closest('.post').find('a[name="123"]').length > 0; if (!hasAnchor123) { // 仅对非例外容器执行移除操作 $postBody.find('p:not(:first)').remove(); } });
代码说明
- 用
closest('.post')精准定位到.post-body的外层容器,这是层级匹配的关键 - 在
.post容器内通过find('a[name="123"]')判断是否存在目标锚点 - 仅当容器不含目标锚点时,才移除
.post-body内除第一个<p>外的所有<p>
效果验证
- 包含
name="123"锚点的.post容器下,.post-body内的所有<p>都会完整保留 - 其余
.post容器下的.post-body仅保留第一个<p>,多余的<p>被移除
内容的提问来源于stack exchange,提问作者user5853892
相关产品推荐
相关产品推荐

