【发布时间】:2020-01-24 22:40:33
【问题描述】:
假设 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>
除了“excludedElement”div 中的元素之外,我想要“容器”div 中具有“MyClass”类的所有元素。在这种情况下,结果仅包含跨度 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 选择器来检索这个特定的元素集?
一种方法是暂时从树中删除excludedElement,查询“MyClass”,然后替换excludedElement,但我想避免修改DOM。
【问题讨论】:
标签: javascript html css css-selectors queryselector