如何使用CSS 2.0选择器通过其父级上设置的属性选择元素?

时间:2015-09-11 20:32:10

标签: css qt css-selectors qwebview

我的QWebView

中有这样的HTML
<div class='a' id='root'>
<div id='x'>...</div>
<p> ...
<p>
...
<div id='x2'>...</div>
<div>
    <a href='go/xxxx'>go</a>
</div>
</div>

如何选择a?我试过这个选择:

div[id='root'].a
div[id='root'] + a

但它没有奏效。代码:

QWebFrame* frame = webView->page()->mainFrame();
QWebElement button = frame->documentElement().findFirst("div[id='root'].a");
assert(!button.isNull()); // gets executed

2 个答案:

答案 0 :(得分:3)

您的选择器正在选择id =&#39; root&#39;和班级=&#39; a&#39;。如果要在该div中选择一个标记,则需要创建选择器:

div[id='root'].a a

额外的&#39; a&#39;在选择器的末尾告诉jquery选择div的内部。

答案 1 :(得分:1)

您可以switch to using XPath 2.0 in Qt拥有更多表达自由,但是您需要将HTML作为XML进行处理。

要解决此问题,请为a添加descendant selector 1 。即,将此div[id='root'].a更改为:

div[id=root].a a

作为替代方案,如果Qt中存在错误,请尝试:

div[id=root][class=a] a

或(可能有点宽):

div[id~=root][class~=a] a

最后两个只是替代方案,以防由于某种原因对您的代码进行原始修复(添加a后代选择器)不起作用。

上面的代码段不使用带引号的字符串,这是可选的。

1 在我的原始(错误)解决方案之后,在stevenc4's answer中看到了添加a。感谢他:)