如何获取所有可能具有祖先的元素,并且它们的所有祖先都没有指定的类
How to get all elements which possibly have ancestors and all their ancestors are without a specified class?
我的HTML中有一部分类似于下面的部分,我必须只选择没有任何指定类的祖先的元素。我从事的项目非常大,我认为我不应该在这里发布所有代码,我认为这超出了StackOverflow的目的。
我想要的是按所有祖先过滤元素,而不仅仅是它们的父母。我试过这个:
// This colors two of the <span> elements instead of one. It colors the ".a > .b" <span> and this behavior seems wrong to me.
$(":not(.a) .b:not(.a)").css("color", "red");
// This call only colors the border of the ".b" <span> which, I think, is the correct behavior and should be the behavior of the call above.
$(":not(.a) > .b:not(.a)").css("border-color", "blue");
span {
border: 0.1rem solid gray;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="a">
<span class="b">.a > .b</span> <!-- Why does this <span> element become red? -->
<span class="a b">.a > .a.b</span>
</div>
<div>
<span class="b">.b</span>
<span class="a b">.a.b</span>
</div>
我已经把上面的代码放在这个JSFiddle中。我已经使用没有 jQuery 的 document.querySelectorAll
函数测试了两个选择器,行为是相同的。
谢谢! :-)
:not(.a) .b:not(.a)
选择具有类 b 但没有类 a 的所有元素,这些元素具有任何没有类 a 的祖先,例如 <body>
& <html>
。
:not(.a) > .b:not(.a)
选择具有类 b、不带类 a 且没有类 a 的直接父级的所有元素。
你的意思是选择.b
元素
- 不
.a
,并且 -
没有任何祖先是
.a
?
那么这只能用jQuery来做(了解更多(:
$(".b:not(.a, .a *)")
如果需要在 CSS 中执行此操作,可以使用带有上述选择器的 jQuery 添加一个类,也可以使用覆盖:
.b {
/* Style all .b elements */
}
.a .b, .a.b {
/* Override the previous rule */
}
相关文章:
- 如何将事件stopPropagation限制为祖先元素
- 如何测试HTML元素的祖先是否有CSS类
- 如何在不使用multipleparent()调用的情况下找到(元素表的)第一个祖先
- 获取一个元素相对于Javascript中一个祖先的位置
- 检索具有特定数据属性的祖先元素
- jQuery 遍历 -- 查找相对于共同祖先的元素
- 获取看起来像选择器的祖先元素
- 新添加的元素无法使用 jQuery API closest() 在 DOM 树中向上遍历其祖先,返回“undefined
- 筛选具有特定类作为祖先的元素
- Vanilla javascript检查元素或祖先是否有类
- 使用jQuery在祖先和后代之间插入元素
- 如何获取所有可能具有祖先的元素,并且它们的所有祖先都没有指定的类
- 检查元素的祖先是否已固定
- 如何确定子元素是否在包含祖先之外
- 使用jQuery在一个元素和它的祖先元素之间选择一个元素的最好方法是什么?
- 查找带有未选中复选框的元素并删除其祖先元素
- 元素或其祖先是类的成员
- 如何使用JQuery获取html元素(PartialView)的祖先元素
- 设置元素的宽度(或高度)为较高祖先元素的百分比
- 在JavaScript中,如果在HTML元素及其祖先上声明了事件触发器,则首先触发