现在我有一个使用jQuery的选择器,如下所示:
.original-tweet:not([data-is-reply-to="true"],.retweeted)
然而,使用红宝石中的Nokogiri宝石似乎无效:
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不支持的东西吗?
答案 0 :(得分: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属性而不是转推类)< / p>
github.com/sparklemotion/nokogiri/issues/451 - 这个问题与我在这里需要使用xpath的原因有关。
答案 1 :(得分: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)
应该有用。
答案 2 :(得分:1)
目前可能的解决方法可能是:
doc.css('.original-tweet:not([data-is-reply-to="true"])') - doc.css('.retweeted')