2011-02-15 8 views
7

SELECT 요소가 주어진다 :jquery : [] selector?

<select> 
    <option>foo</option> 
    <option>bar</option> 
    <option>baz</option> 
</select> 

"bar"값을 가진 OPTION 요소를 선택하고 싶다.

이 작동하지 않습니다 :

$('option[text="bar"]').attr('selected', true); 

그러나 작동하지 :

$('option:[text="bar"]').attr('selected', true); 

왜?

라이브 데모 : http://jsfiddle.net/YbfqZ/2/

+0

지난 몇 달 동안 jQuery가 변경되었습니다. 따라서 속성 입력 [name = dog_type] : radio를 인용하지 마십시오. 이 입력 [@ name = "dog_type"]처럼 보이곤했습니다. 따옴표와 @ 기호가 더 이상 작동하지 않는 많은 오래된 자습서가 있습니다. – Tobias

+7

@Gaspy 아니요, 그 반대입니다. 전에 따옴표는 선택 사항 이었지만 지금은 필수 항목입니다. 그것은 docs에서 그것을 말합니다 : http://api.jquery.com/attribute-equals-selector/ –

+0

글쎄, 정말 내 입안에 발을 넣어. 어제 jQuery 코드를 가져 와서 따옴표를 제거하여 문제를 해결했지만 어제 문제가있었습니다. – Tobias

답변

8
그 행동에 대한 이유가 아니기 때문에 당신의 결장이 querySelectorAll의 선택을 나누기 때문이다

유효한.

이와 같이 기술적으로 지원되지 않더라도 콜론을 허용하는 Sizzle이 기본값입니다 (이는 곧 중단 될 수 있음을 의미 함). Sizzle은 속성과 속성을 모두 확인합니다. 따라서 text 속성을 찾을 수 없지만 속성은 <option> 요소입니다.

Here's an example 이는 Sizzle이 attribute-equals 선택자가있는 속성 대신 속성과 일치 함을 보여줍니다. 예로부터


코드 :

// set a custom property on the last option 
$('#id option').slice(-1)[0].customProp = 'customValue'; 

    // breaking the selector with : we default to Sizzle, 
    // which matches our custom property 
$('#id option:[customProp="customValue"]').attr('selected', true); 

편집 :내 예를 들어 링크 내가 잘못 개정 번호를 입력하기 때문에 이전에 다른 사람의 예를 참조. 결정된.

+1

+1 - 좋은 답변. – jAndy

+0

그러나 jQuery가 콜론없이 선택기를 인식하지 못하는 이유는 무엇입니까? [CSS2] (http://www.w3.org/TR/CSS2/selector.html#pattern-matching) 및 [CSS3] (http://www.w3.org/TR/2001/CR-css3) -selectors-20011113/# 선택자), 따옴표는 선택자에 속하며 콜론은 포함하지 않습니다. – eykanal

+0

@jAndy : 고마워요. 재미있는 점은 * [* 대답 *]을 [이 답변] (http://stackoverflow.com/questions/5009179/jquery-traversing-select-option-text/5009231#5009231)에 대한 의견으로 남겨두고, 그 다음에 Šime을 보았습니다. 질문했다. – user113716

2

이 작업을 수행하는 올바른 방법은 SELECT에게 ID를 부여하고, 옵션 항목의 값을 제공하는 것입니다. 그런 다음 선택 값을 설정할 수 있습니다.

<select id="theSelect"> 
    <option value="foo">foo</option> 
    <option value="bar">bar</option> 
    <option value="baz">baz</option> 
</select> 

그리고 JS이

$('#theSelect').val('foo'); 

라이브 데모 같을 것이다 http://jsfiddle.net/YbfqZ/4/

+1

어떤 종류의 셀렉터가': [text = "bar"]'입니까? –