2010-03-27 2 views
4

를 사용하여 여러 클래스 선택 어떻게 내가 클래스 even 또는 클래스 odd이있는 모든 행을 선택하고 싶습니다. 어떤 도움도 감사합니다, 감사합니다내가 테이블 요소에서 노코 기리 루비

report.css("table.data tr[class~=odd even]").each{|line| parse_line_item(line)} 

하지만 그것은 오류가 발생했습니다 :

나는 JQuery와 구문을 시도했다.

답변

10

개 사용 선택기 : report.css("table.data tr.odd, table.data tr.even")

값 클래스 목록은 공백 일치하는 CSS 속성 선택기 점검 작업자의 ~=. 예를 들어 tr[class~=odd]<tr class="odd"><tr class="odd ball">과 일치합니다. 그러나 class 특성의 경우에는 더 나은 선택자는 단순히 tr.odd입니다. 당신이 가치있는 공간이 ~= 연산자를 사용하는 경우

(tr[class~="odd even"] 같이 선택기 아무것도 일치하지 않습니다

+0

그러나이 방법은 순차적으로 사용하는 것이 아니라 '1,3,5,7,9,2,4,6,8'으로 제공합니다. 순차적으로 얻을 수있는 방법이 있습니까? –

+0

질서가 중요하다면'table.data tr [class]'를 선택하여'class' 속성으로 모든'tr'을 찾은 다음 Ruby에서 정확한'class' 값을 확인하십시오. 간결하지는 않지만 CSS 선택기보다 훨씬 유연합니다. 그것에 –

+0

아픈 모양, 고마워! –

2

CSS의 선택을 당신도 구문 적으로 유효한 선택이 없다가 있습니다.

[class~=odd even] 
가 공백을 포함

값은 항상 인용해야하므로이 셀렉터를 작성하는 올바른 방법은 다음과 같습니다

[class~="odd even"] 

그러나,이 선택은 실제로 지금까지 아무것도 일치하지 않을 수 있습니다 다음 [attr~=val] 속성 값 선택 일치 ...

단어가 공백으로 구분되기 때문에 an element with the att attribute whose value is a whitespace-separated list of words, one of which is exactly "val". If "val" contains whitespace, it will never represent anything (since the words are separated by spaces)

, 이것은 그들도 스스로를 공백 포함 할 수 없음을 의미합니다. 하지만이 ( "odd even")를 찾고 있습니다 말씀이 그러므로 그 어느 것도 일치하지 않을 수이 공백을 포함한다.

아마도 당신을 위해 무엇을 찾고있는 것은 OR 콤비이지만, 그것은 존재하지 않습니다. 따라서, 당신이 찾고있는 것은 CSS 셀렉터로 표현 될 수 없습니다.

사실 사실이 아닙니다. 은 CSS 선택기로 표현할 수 있습니다.

table.data tr.odd, table.data tr.even 

이 기억 : CSS는 설정을 기반으로, 때문에 순서는 중요하지 않습니다 당신은 단순히 선택 그룹을 사용할 수 있습니다, 당신은 OR 콤비를 사용하는 것과 같습니다 성냥의 조합을 설정 제공한다.귀하의 경우에는, 순서 는 CSS 정말 작업에 대한 잘못된 도구입니다 즉, 사항을 수행

report.xpath('//table[@class="data"]//tr[@class="odd" or @class="even"') 

난 그냥이 같은 것을 사용하지 않는 이유를 잘 모르겠습니다 것을 인정해야하지만 : 결국

report.css('table.data tr') 

, 모든 행을 선택하는 등의 모든 홀수 및 짝수 행 같은 선택되지? 내 말은, 너 안에 또 뭐가 들었어, 불합리한 행이야?

+0

'tr'은 예를 들어 헤더 일 수 있습니다. –