【发布时间】:2016-06-13 11:46:48
【问题描述】:
我正在尝试选择一个或多个不是另一个特定元素的后代的元素。
<html>
<body>
<div>
<p>
<b>
<i> don't select me </i>
</b>
</p>
</div>
<div>
<i>don't select me either </i>
</div>
<i> select me </i>
<b>
<i> select me too </i>
</b>
</body>
</html>
在上面的示例中,我想选择所有 'i' 元素,它们是 not 在 div 元素中。 使用 ('div i') 的另一种方法很简单,但在 :not() 中使用它是不可能的。
如何选择 div 元素之外的所有 i 元素? 通常建议使用 jQuery,例如:
nondiv_i = all_i.not(all_div.find("i"))
我不能使用 jQuery,但可以使用 jqLite - jqLite 没有 not() 函数。也欢迎 jqLite 解决方案! 是否可以不重复迭代和比较来做到这一点?
编辑:澄清一下,我不希望我的 i 元素有任何 div 祖先,不仅没有直接的 div 父母。
类似的 XPath 如下所示:
//i[not(ancestor::div)]
【问题讨论】:
-
document.querySelectorAll('body :not(div) i') -
@putvande 请添加您的评论作为答案,以便 OP 希望接受它。
-
这个答案不起作用。它返回 不要选择我 和 也选择我。考虑它时看起来不错(选择主体,选择所有不是 div 的元素,然后抓取 i 元素),但它不起作用(这是我的问题首先来自的地方)。虽然我已经把我项目的这一部分放在一边,我并没有放弃这个问题。 :) 仍在寻找答案。
标签: javascript angularjs selenium-webdriver css-selectors jqlite