/ /なぜ複数の疑似要素セレクターでNokogiriが失敗するのですか? -ルビー、CSSセレクター、のこぎり

Nokogiriが複数の疑似要素セレクタで失敗するのはなぜですか? - ルビー、CSSセレクター、ノコギリ

私は「ノコギリ」を使用していますが、擬似セレクターチェーンの問題に遭遇しました。

これらの仕事:

document.at_css(".link:not(.button)")
document.at_css(".link:after")

しかし この doesn "t:

document.at_css(".link:not(.button):after")

これらの行に沿ってかなり長いエラーメッセージが表示されます。

/Users/me/.rvm/gems/ruby-2.0.0-p195/gems/nokogiri-1.6.0/lib/nokogiri/css/parser_extras.rb:87:in `on_error":
unexpected ":" after "[#<Nokogiri::CSS::Node:0x007fc9540932b8 @type=:CONDITIONAL_SELECTOR, @value=[#<Nokogiri::CSS::Node:0x007fc954093da8 @type=:ELEMENT_NAME, @value=["*"]>, #<Nokogiri::CSS::Node:0x007fc954093f38 @type=:COMBINATOR, @value=[#<Nokogiri::CSS::Node:0x007fc95409b350 @type=:CLASS_CONDITION, @value=["link"]>, #<Nokogiri::CSS::Node:0x007fc95409ab80 @type=:NOT, @value=[#<Nokogiri::CSS::Node:0x007fc95409acc0 @type=:CLASS_CONDITION, @value=["button"]>]>]>]>]"
(Nokogiri::CSS::SyntaxError)

この問題を解決するにはどうすればよいですか?

回答:

回答№1は2

サンプルHTMLがないと、「何を望んでいるのか」を伝えるのは困難ですが、私は次のものの置き換えから始めてワイルドショットを撮ります。

document.at_css(".link:not(.button):after")

with:

document.css(".link").reject{ |n| n["class"][/b button b/ix] }.first.next_sibling

CSSの一部がjQueryと完全に一致していないため、回避策が必要であるというコメントを読みました。

https://github.com/sparklemotion/nokogiri/issues/907

doc.css("input:not([disabled])").count 回避策が役立つ場合があります。

https://github.com/sparklemotion/nokogiri/blob/master/ROADMAP.md


回答№2の場合は3

後は本当にセレクタではありません。 何をしようとしているのかを説明する必要があるかもしれません。

document.at(".link:not(.button)").after "content"