考虑以下HTML:
<div class="status-date">
<strong>Date Available:</strong>
10/05/2016
</div>
我希望:not()
选择器能够定位日期字符串“10/05/2016”,如下所示:
.status-date *:not(strong) {
text-decoration: underline;
}
两个问题:
1. :not()
选择器是否具备此功能?
2.如果没有,是任何 CSS选择器能够做到这一点吗?
上下文:这实际上与样式文本节点无关。我正在做一些网页抓取,我想在这种情况下忽略<strong>
标记。如果它是关于样式的,我可以直接定位div
并覆盖<strong>
上的样式以“取消它”。
进一步背景:我可以看到我天真的尝试不能按预期工作。例如,如此代码中所示:http://codepen.io/anon/pen/rWezQK 但是我有可能误解了我所描述的选择器或DOM结构。
答案 0 :(得分:2)
简单的选择器代表元素。对于所有简单选择器都是如此,包括*
和:not()
。文本由元素包含,但它本身不是元素。你不会能够匹配&#34;只是带有任何CSS选择器的文本,因为就选择器而言,DOM调用的文本节点甚至不存在于文档树中。
规范本身在
:not()
选择器上只提供三行。
规范中的第一行支持:
否定伪类,不是(X),是一个函数符号,它将一个简单的选择器(不包括否定伪类本身)作为参数。它表示一个未被其参数表示的元素。
请注意,它表示&#34;它代表一个元素&#34;。
如果您正在进行网页抓取,请考虑使用XPath:
//div[contains(concat(' ', @class, ' '), ' status-date ')]/strong/following-sibling::text()
答案 1 :(得分:1)
默认情况下,CSS不会影响未包装在容器中的文本节点。因此,:not-selector不能做你想做的事情。如果您要抓取这样的信息,您将不得不在服务器端解析它 - 或者只是设置div strong { display: none; }
来查看内容 - 但这可能不会影响抓取位。 ..