2

现在我有一个使用 jQuery 的选择器,如下所示:

.original-tweet:not([data-is-reply-to="true"],.retweeted)

然而,这似乎不适用于在 ruby​​ 中使用 Nokogiri gem:

doc.css('.original-tweet:not([data-is-reply-to="true"],.retweeted)')

以上导致现金,但每个部分都不能独立工作:

 doc.css('.original-tweet:not([data-is-reply-to="true"])')

 doc.css('.original-tweet:not(.retweeted)')

实际获得我想要的选择器的最佳方法是什么。这是nokogiri不支持的东西吗?

4

3 回答 3

3

好的,我用 XPATH 解决了

以下工作(注意:我创建的 xpath 完全是计算机生成的)

doc.xpath("//*[contains(concat(' ', @class, ' '), ' original-tweet ') and not(@data-is-reply-to = \"true\") and not(@data-retweet-id)]")

编辑:进一步检查表明这仍在选择带有转推类的项目(事实证明这是我的错误假设,我应该一直在寻找 data-retweet-id 属性而不是转推类)

github.com/sparklemotion/nokogiri/issues/451 - 这个问题与我为什么需要在这里使用 xpath 有关。

于 2013-03-16T03:05:38.390 回答
1

虽然选择器可以与 jQuery 一起使用,但它不是一个有效的 CSS 选择器:

> $$('.original-tweet:not([data-is-reply-to="true"], .retweeted)')
Error: SyntaxError: DOM Exception 12

.original-tweet:not([data-is-reply-to="true"]):not(.retweeted)应该管用。

于 2013-03-16T02:42:22.677 回答
1

目前可能的解决方法可能是:

doc.css('.original-tweet:not([data-is-reply-to="true"])') - doc.css('.retweeted')
于 2013-03-16T06:20:23.387 回答