首页 > 解决方案 > 在jQuery中排除带有前缀的元素及其所有子元素

问题描述

jQuery("body *:not([id|='keep'])").removeAttr('id');

将定位页面上的所有元素,除了那些前缀以keep并删除其 id 属性的元素。

现在我试图在排除列表中不仅包括前缀元素,而且包括它的子元素。

类似于以下内容(不起作用):

jQuery("body *:not([id|='keep']), body *:not([id|='keep']).find('*')").removeAttr('id');

有任何想法吗?

标签: jquery

解决方案


您可以通过是否具有匹配的祖先来过滤集合中的每个元素[id|='keep']。您还可以放入[id]初始选择器以仅选择具有 ID 的元素:

jQuery("body [id]:not([id|='keep'])")
  .filter(function() { return !this.closest('[id|="keep"]') })
  .removeAttr('id');

jQuery("body [id]:not([id|='keep'])")
  .filter(function() { return !this.closest('[id|="keep"]') })
  .removeAttr('id');
  
console.log(document.body.innerHTML);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="keep">
  <div id="child">child</div>
</div>
<div id="keep-2">keep-2</div>
<div id="somethingelse">somethingelse</div>


推荐阅读