假设 HTML 结构如下所示:
<div id="container">
<div class="A">
<div id="excludedElement">
<p>
<span class="MyClass">1</span>
<span class="MyClass">2</span>
<span class="MyClass">3</span>
</p>
</div>
</div>
<div class="B">
<p>
<span class="MyClass">4</span>
<span class="MyClass">5</span>
<span class="MyClass">6</span>
</p>
</div>
</div>
我想要“容器” div 中具有“MyClass”类的所有元素,但“excludedElement”div 中的元素除外。在这种情况下,结果仅包含跨度 4、5 和 6。
我目前的解决方案是首先使用“MyClass”获取所有元素,然后使用“MyClass”获取excludedElement 内的所有元素。对于第一个列表中的每个元素,我们检查它是否在第二个列表中,如果是则跳过它。这是 O(n^2) 运行时间,所以我想避免这种情况。伪代码供参考:
const allElements = container.querySelectorAll('.MyClass');
const excludedElements = container.querySelectorAll('#excludedElement .MyClass');
var result = [];
for (const element in allElements)
{
if (!excludedElements.Contains(element))
{
result.Add(element);
}
}
有没有办法在 querySelectorAll() 中制作一个 CSS 选择器来检索这组特定的元素?
一种方法是从树中临时删除 excludeElement,查询“MyClass”,然后替换 excludeElement,但我想避免修改 DOM。