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)')

必要なセレクターを実際に取得する最良の方法は何ですか。これはノコギリでサポートされていないだけですか?

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 に答える