2017-02-12 5 views
0

Nokogiri 특정 문자열을 포함하지 않는 요소를 가져오고 싶습니다. CSS 선택기 부분 일치를 사용하는 방법 : 연산자가 아닙니다.

doc = Nokogiri::HTML('<div id="foo"></div><div id="bar"></div>') 
doc.css('*[id*="foo"]') 
# => <div id="foo"/> 
doc.css('*:not[id*="foo"]') 
# => [] 

나는 *:not[id*="foo"] 반환에 id bar이있는 요소를 생각하지만 그렇지 않습니다.

부분 일치 및 :not 연산자를 동시에 어떻게 사용할 수 있습니까?

답변

1

다음은 documentation이고 여기에 해당하는 답이다 "CSS use :not ID with CLASS을"

doc.css('div:not(#foo)') 

당신에게 그 idfoo이 아닌 모든 div의를 제공 할 것입니다.

doc.css('*:not(#foo)') 

당신에게 그 idfoo이 아닌 모든 노드를 제공 할 것입니다.

doc.css('div:not([id*="foo"])') 

당신에게 그 idfoo를 포함하지 않는 모든 div의를 제공 할 것입니다.

require 'nokogiri' 
doc = Nokogiri::HTML('<div id="foo"></div><div id="bar"></div><div id="foofoo"></div>') 

puts doc.css('div:not([id*="foo"])') 
#=> <div id="bar"></div> 
0

부정적인 조건에서 대괄호가 누락되었습니다. 용도 : :not(whatever)

doc.css('*[id*="foo"]') # All elements with foo contained in the id 

doc.css('*:not([id*="foo"])') # All elements without foo contained in the id