텍스트로 옵션을 선택해야하는 선택기는 무엇입니까?


207

<select>텍스트가 특정 값과 같은 옵션이 있는지 확인해야 합니다.

예를 들어가 있으면 <option value="123">abc</option>"abc"를 찾고 있습니다.

이 작업을 수행 할 수있는 선택기가 있습니까?

$('#select option[value="123"]');텍스트 와 비슷 하지만 비슷한 것을 찾고 있습니다.


흠 ... hasSLaks의 대답은 유용하지만 Floyds의 대답도 좋습니다 ... 무엇을 받아 들여야할지 모르겠습니다.
Hailwood

또한 대소 문자를 구분합니까? (대소 문자를 구분하지 않고 항상 낮은 것으로 변환 할 수 있음
Hailwood

1
대소 문자를 구분하지 않으면 JavaScript 핵심 함수 인 .toLowerCase ()를 사용하여 비교합니다. 또한 귀하의 질문에 가장 유용한 답변을 수락하십시오. :)
Hari Pachuveetil

multiselect API가있는 드롭 다운에서는 작동하지 않습니다 ?? 나는 가능한 모든 해결책을 운이 없다고 시도했다. eric hynd의 multiselect dropdowm API를 사용하고 있습니다. 누구든지이 문제를 해결할 수 있습니까?
Chaitanya Chandurkar

답변:


320

이것은 도움이 될 수 있습니다.

$('#test').find('option[text="B"]').val();

데모 바이올린

그러면 B텍스트가 포함 된 텍스트가 아닌 텍스트가있는 옵션이 제공 B됩니다. 도움이 되었기를 바랍니다

최신 버전의 jQuery에서는 위의 기능이 작동하지 않습니다. 아래 Quandary가 언급 한 것처럼 , 이것은 jQuery 1.9.1에서 작동합니다.

$('#test option').filter(function () { return $(this).html() == "B"; }).val();

바이올린 업데이트


1
최신 버전의 jquery에서는 작동하지 않습니다 (<option>에서 'value ='를 제거하는 경우)
KevinDeus

27
@ KevinDeus : 왜 downvote !? 정답은 jQuery 버전이었습니다.
Hari Pachuveetil

11
대신 $ ( '# test option'). filter (function () {return $ (this) .html () == "B";}). val ();
Stefan Steiger

84
@Quandary 그럼에도 불구하고 짧은 의견이 충분할 때 답변에 투표를하는 것은 정당한 이유가 아닙니다. 또는 jQuery의 모든 새로운 릴리스에 대해 그의 모든 답변을 다시 테스트 할 것으로 기대하십니까?
WynandB

2
downvote는 위의 예가 선택한 값을 찾고 선택한 값을 설정하지 않기 때문에 발생한다고 생각합니다.
nivs1978

133

:contains()선택기 를 사용하여 특정 텍스트가 포함 된 요소를 선택할 수 있습니다 .
예를 들면 다음과 같습니다.

$('#mySelect option:contains(abc)')

주어진 <select>요소에 그러한 옵션이 있는지 확인하려면 다음 .has()방법을 사용하십시오 .

if (mySelect.has('option:contains(abc)').length)

<select>이러한 옵션이 포함 된 모든을 찾으려면 :has()선택기를 사용하십시오 .

$('select:has(option:contains(abc))')

3
:contains지금 결정적이지 않습니까?
Hari Pachuveetil

정확히 포함 된 문제는 무엇입니까?
Ogier Schelvis 8

선택한 옵션만으로 어떻게 할 수 있습니까?
toddmo

이것도 옵션을 얻지 123abcdef않습니까?
Teepeemm

@Teepeemm 네, 그것은 두 가지 최고의 답변의 차이점입니다. 맨 위 검사는 특정 텍스트 만 포함 된 옵션을 반환합니다.이 옵션은 해당 특정 텍스트 만 포함하는 옵션을 반환합니다. 우연히도 현재 실제로 필요한 것이므로 게시 한 것이 매우 기쁩니다.
Lee A.

30

텍스트 상자의 값을 기반으로 목록의 선택된 인덱스를 설정하려고하는데 일부 텍스트 값이 여러 옵션에 포함되어 있기 때문에 이전 제안 중 어느 것도 jQuery 1.7.2에서 효과가 없었습니다. 나는 다음을 사용하여 끝났다.

$('#mySelect option:contains(' + value + ')').each(function(){
    if ($(this).text() == value) {
        $(this).attr('selected', 'selected');
        return false;
    }
    return true;
});

1
실제로 올바른 결과를 반환하기 때문에 이것이 가장 좋은 대답이라고 생각합니다. 그러나 나는 도울 수는 없지만 contains완전히 생략하면 실제로 속도를 높일 수 있다고 생각 합니다.
styfle

이것은 나를 위해 일했지만 내 시나리오에서는 그리드에서 편집을 여러 번 클릭 할 수 있으므로 일치하는 항목이 없을 때 선택된 속성을 제거해야했습니다. 그렇지 않으면 선택한 첫 번째 옵션이 후속 편집을 위해 남아 있습니다. else {$ (this) .attr ( 'selected', ''); 거짓을 반환; }
esp

이 솔루션은 나에게 도움이되었지만 옵션 속성을 설정하는 대신 실제로 필요한 선택 메뉴를 변경했습니다. $(this).parent().val($(this).val()); 두 가지를 모두 수행 할 수는 있지만 부모 만 설정 val()하면 트릭을 수행했습니다.
billynoah


15

이것은 나를 위해 일했다 : $("#test").find("option:contains('abc')");


3
작동 하는지 에 대한 설명을 추가해야합니다 .
Hannes Johansson

@HannesJohansson 또는 그는 적어도 5 년이 지난 SLaks 답변과 다른 점이나 새로운 점을 설명해야합니다. ; ^)
ruffin

4
<option> abcd </ option> 옵션도 있습니다.
Charles

고마워 이것은 정확하고 모든 사람들이 놓친 것은 .attr ( 'value'); 끝까지. 이것은 동적으로 사용할 가치를 실제로 얻는 가장 쉬운 방법입니다! 따라서 전체 코드는 다음과 같아야합니다. $("#testselect").find("option:contains('option-text')").attr('value'); 이렇게 .click()하면 설정을 변경하는 것과 같은 이벤트를 사용할 수 있습니다 .
ChrisKsag

12

드롭 다운 목록에서 텍스트를 선택하는 가장 좋은 방법입니다.

$("#dropdownid option:contains(your selected text)").attr('selected', true);

3
비슷한 답변과 마찬가지로으로 옵션을 찾을 수 있습니다 this is your selected text plus more.
Teepeemm

4

Firefox와 IE에서 모두 작동 할 때까지 몇 가지를 시도했습니다. 이것이 내가 생각해 낸 것입니다.

$("#my-Select").val($("#my-Select" + " option").filter(function() { return this.text == myText }).val());

더 읽기 쉬운 fasion으로 작성하는 또 다른 방법 :

var valofText = $("#my-Select" + " option").filter(function() {
    return this.text == myText
}).val();
$(ElementID).val(valofText);

의사 코드 :

$("#my-Select").val( getValOfText( myText ) );

최신 버전의 jQuery
Fr0zenFyr

요점이 "#my-Select" + " option"뭐야? 왜 안돼 "#my-Select option"?
Teepeemm

3

다음을 사용하십시오

$('#select option:contains(ABC)').val();

1
제공 한 코드로 문제를 해결할 수 있지만 문제를 해결하는 방법에 대한 간단한 설명을 추가하십시오. 스택 오버플로에 오신 것을 환영합니다, 읽기 권장 답변하는 방법 .
Dan Beaulieu

3
ABC, ABCD, ABCDEF와 같은 옵션이 있다면?
hungndv

1

이것은 jQuery 1.6 (열기 대괄호 앞의 콜론 참고)에서 작동하지만 최신 릴리스에서는 (1.10) 실패합니다.

$('#mySelect option:[text=abc]")

5
흥미롭지 만 불행히도 작동하지 않는 것 같습니다 (jQuery 1.10.2).
WynandB

당신은 $("#mySelect option").filter(function() { return this.text == "abc"; });jQuery의 최신 버전에서 작동 하는 것과 같은 것을 포함하고 싶을 것이다. 또는 아마도 당신이 선호하는 다른 방법 ..
Fr0zenFyr

1

아래 jquery 버전 1.10.2의 경우 나를 위해 일했습니다.

  var selectedText="YourMatchText";
    $('#YourDropdownId option').map(function () {
       if ($(this).text() == selectedText) return this;
      }).attr('selected', 'selected');
    });


0

이것은 나를 위해 작동합니다 :

var result = $('#SubjectID option')
            .filter(function () 
             { return $(this).html() == "English"; }).val();

result변수는 일치하는 텍스트 값의 인덱스를 반환합니다. 이제 색인을 사용하여 설정하겠습니다.

$('#SubjectID').val(result);

-1

옵션을 반복하거나 동일한 텍스트를 옵션의 다른 속성 안에 넣고 그와 함께 선택하십시오.


-1

이것은 또한 작동합니다.

$ ( '# test'). find ( "선택 옵션 :( 'B')"). filter ( ": selected");


2
또한 옵션을 가져옵니다 ABC.
Teepeemm

-1

이 답변에 설명 된 것처럼 hasText에 대한 자신의 선택기를 쉽게 만들 수 있습니다. 이것은 당신이 옵션을 찾을 수 있습니다$('#test').find('option:hastText("B")').val();

내가 추가 한 hasText 메소드는 다음과 같습니다.

 if( ! $.expr[':']['hasText'] ) {
     $.expr[':']['hasText'] = function( node, index, props ) {
       var retVal = false;
       // Verify single text child node with matching text
       if( node.nodeType == 1 && node.childNodes.length == 1 ) {
         var childNode = node.childNodes[0];
         retVal = childNode.nodeType == 3 && childNode.nodeValue === props[3];
       }
       return retVal;
     };
  }

-2

이것은 나를 위해 작동

var options = $(dropdown).find('option');
var targetOption = $(options).filter(
function () { return $(this).html() == value; });

console.log($(targetOption).val());

모든 게시물 주셔서 감사합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.