我正在使用Nokogiri,我遇到了伪选择器链接的问题。
这些工作:
document.at_css(".link:not(.button)")
document.at_css(".link:after")
但此不会:
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)
如何解决此问题?
答案 0 :(得分:3)
之后不是真正的选择者。 你可能需要解释你想要做什么,否则我建议:
document.at(".link:not(.button)").after "content"
答案 1 :(得分:2)
如果没有样本HTML,很难说出你所追求的是什么,但是我会从替换中选择一个狂野的镜头:
document.at_css(".link:not(.button):after")
使用:
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