Javascript 过滤并减少给定的DOM元素jQuery集合,以便从该集合中删除该集合中其他元素的子元素

Javascript 过滤并减少给定的DOM元素jQuery集合,以便从该集合中删除该集合中其他元素的子元素,javascript,jquery,filter,Javascript,Jquery,Filter,我有一个DOM元素集合,它是在节点上使用RegEx创建的,用于查找特定关键字。此集合包含各种HTML元素 如何将这样的集合缩小到只包含顶级元素 --本质上,给定集合A创建一个集合B,该集合不包含可能是集合中其他元素的子元素的元素 例如: 这里没有钥匙 这里没有钥匙 包含{key} 这里没有钥匙 包含{key} 这里没有钥匙 包含{key} 包含{key} 这里没有钥匙 包含{key} 这里没有钥匙 这里没有钥匙 包含{key} 这里没有钥匙 这里没有钥匙 包含{key} 这里没有钥匙 包含{

我有一个DOM元素集合,它是在节点上使用RegEx创建的,用于查找特定关键字。此集合包含各种HTML元素

如何将这样的集合缩小到只包含顶级元素

--本质上,给定集合A创建一个集合B,该集合不包含可能是集合中其他元素的子元素的元素

例如:


这里没有钥匙
这里没有钥匙
包含{key}
这里没有钥匙
包含{key}
这里没有钥匙
包含{key}
包含{key}
这里没有钥匙
包含{key}
这里没有钥匙
这里没有钥匙
包含{key}
这里没有钥匙
这里没有钥匙
包含{key}
这里没有钥匙
包含{key}
包含{key}
这里没有钥匙
包含{key}

只选上面的那些,里面有文字,怎么样

如果需要,将
主体
更换为另一个容器

let$divs=$(“body>div”)
$divs=$divs.filter(函数(){
返回$(this).text().indexOf(“contains”)!=-1
})
console.log($divs.length)

这里没有钥匙
这里没有钥匙
包含{key}
这里没有钥匙
包含{key}
这里没有钥匙
包含{key}
包含{key}
这里没有钥匙
包含{key}
这里没有钥匙
这里没有钥匙

包含{key}
我认为问题标题的答案与您最后要求的答案不同,因为它涉及到您想要的集合([“.div_3”,“.div_6”]

如果我没有错的话,代码段中的父项是[“.div_3”,“.div_d”]。请指定要获取的集

返回集合中没有父项的集合

可能效率不高,但您可以通过将密钥集合筛选到节点来检查每个节点是否在密钥集合中:

var divs = keydivs.filter(function() {
  return keydivs.filter($(this).parent()).length == 0;
});
例如:

//查找所有可用操作代码中的所有节点,以在此处包括顶级节点和子节点
var keydivs=$(“div”).filter(函数(){
返回$(this).contents().first('[nodeType=3]').text().indexOf(“{key}”)>=0
});
log(keydivs.length,keydivs.map(function()){
返回this.className;
}).get());
//筛选集合中没有父项的项
var divs=keydivs.filter(函数(){
return keydivs.filter($(this.parent()).length==0;
});
log(divs.length,divs.map(function()){
返回this.className;
}).get());
div>div{左边距:1em;}

这里没有钥匙
这里没有钥匙
包含{key}
这里没有钥匙
包含{key}
这里没有钥匙
包含{key}
包含{key}
这里没有钥匙
包含{key}
这里没有钥匙
这里没有钥匙
包含{key}
这里没有钥匙
这里没有钥匙
包含{key}
这里没有钥匙
包含{key}
包含{key}
这里没有钥匙
包含{key}

请将jQuery代码添加到代码段Imade@mplungjan,jQuery代码非常复杂,有很多非必要的代码和逻辑,在这里添加这些代码和逻辑不会使问题变得更好或更简单…我相信。请参阅问题底部的更新:)您是否有ID数组,还是jquery集合?它是jquery集合。它有时可能是一个相当大的集合,包含许多不同的HTML标记、类、ID和no ID等,因此实现这一点的唯一方法是尝试并筛选出包含在同一集合中的父集合中的子集合。代码处理用户输入的HTML内容,这些内容没有任何标准化。是的,看起来像是需求中的输入错误。不幸的是,答案是用来添加问题的答案的(这不是)。当你有50个代表时,你可以给问题添加评论,这应该是。无无类型,仅需要[“.div_3”、“.div_6”]。因为它们包含所有的{key}。。。。因此不需要处理div_d,因为它将作为div_3的一部分进行处理。我会尝试更新标题:)谢谢你的提醒!刚刚更新了标题。。。为了清晰起见,必须将其延长很多,但实际问题始终在问题的主体中,而不是标题中:)但是div_6不是父元素-div_6没有子元素谢谢。。。改写了问题的这一部分以消除任何混淆:--基本上,给定集合A,创建一个集合B,该集合不包含可能是集合中其他元素的子元素的元素。