jQuery-텍스트 설명을 통해 선택 컨트롤의 선택된 값 설정


530

선택 컨트롤이 있고 자바 스크립트 변수에는 텍스트 문자열이 있습니다.

jQuery를 사용하여 select 컨트롤의 선택된 요소를 내가 가진 텍스트 설명이있는 항목으로 설정하려고합니다 (내가없는 값과 반대).

나는 가치로 설정하는 것이 매우 사소한 것을 알고 있습니다. 예 :

$("#my-select").val(myVal);

그러나 나는 텍스트 설명을 통해 그것을하는 데 약간의 충격을 받았습니다. 나는 텍스트 설명에서 가치를 얻는 방법이 있어야한다고 생각하지만 내 두뇌는 너무 금요일 오후에 그것을 해결할 수 없습니다.


1
@DanAtkinson은 똑같은 일을하려고했습니다. select 는이 질문과 전혀 관련이 없습니다.
thecoshman

답변:


757

jQuery v1.6 +에 대한 설명으로 선택

var text1 = 'Two';
$("select option").filter(function() {
  //may want to use $.trim in here
  return $(this).text() == text1;
}).prop('selected', true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<select>
  <option value="0">One</option>
  <option value="1">Two</option>
</select>

1.6 이하 및 1.4 이상의 jQuery 버전

var text1 = 'Two';
$("select option").filter(function() {
  //may want to use $.trim in here
  return $(this).text() == text1;
}).attr('selected', true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>

<select>
  <option value="0">One</option>
  <option value="1">Two</option>
</select>

이 방법은 1.6보다 높지만 1.9보다 작은 버전에서는 작동하지만 1.6 이후에는 더 이상 사용되지 않습니다. 그것은 작동하지 않습니다 1.9+ jQuery를에.


이전 버전

val() 두 경우 모두 처리해야합니다.

$('select').val('1'); // selects "Two"
$('select').val('Two'); // also selects "Two"
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>

<select>
  <option value="0">One</option>
  <option value="1">Two</option>
</select>


6
이것은 작동하지 않아야한다고 생각합니다 (모호 할 수 있음).하지만 실제로는 나에게 잘 작동합니다. 감사.
DanSingerman

69
jQuery 1.4는 value속성이 지정된 경우 선택하고 value속성이없는 경우에만 텍스트 로 선택하도록이 동작을 변경했습니다 . 따라서이 예 $('select').val('Two')에서는 1.3.x에서 두 번째 옵션을 선택하지만 1.4.x에서는 아무 것도 수행하지 않습니다.
Crescent Fresh

18
그렇다면 1.4에서 가장 좋은 방법은 무엇입니까?
JR Lawhorne

4
최신 버전의 jQuery에서 .val ( 'not-an-option-value')은 선택을 첫 번째 옵션으로 재설정합니다.
dland

5
이 질문에 대한 첫 번째 답변은 1.3.x stackoverflow.com/questions/3644449/…
DA

142

나는 이것을 테스트하지 않았지만 이것은 당신을 위해 효과가있을 수 있습니다.

$("select#my-select option")
   .each(function() { this.selected = (this.text == myVal); });

90

이것을 시도하십시오 ... 텍스트 myText로 옵션을 선택하려면

$("#my-Select option[text=" + myText +"]").prop("selected", true);

spoulson의 대답은 나를 위해 일한 @ ... 나는 .each없이 그것을 시도
제이 코벳에게

2
대부분의 경우이 방법은 불행히도 작동하지 않습니다. 나는 $("#my-Select option[text=" + myText +"]").get(0).selected = true;때때로 클래식 스타일 로 해결해야 했다 : (...
Shahriyar Imanov

2
재설정하기 전에 선택한 속성을 먼저 제거해야합니다. 그렇지 않으면 작동하지 않는 것처럼 보입니다 (1.9에서 작동)
esse

3
@MarkW 1.9 .prop의 경우 .attr; 대신 사용하십시오 . 변경의 원인은 1.9에서 jQuery .attr가 HTML 속성뿐만 아니라 일부 DOM 속성을 변경 하는 데 사용할 수있는 이전 해킹을 비활성화 했기 때문입니다. ( javascript dom properties vs attributes차별을 모르는 경우 Google .)
Mark Amery

jQuery 1.9+ 호환성 .prop('selected', true)대신 사용하도록 답변이 업데이트되었습니다 .attr('selected', 'selected').
erwaman

43

이 방법으로 수행합니다 (jQuery 1.9.1)

$("#my-select").val("Dutch").change();

참고 : change ()를 잊지 마십시오. 그 때문에 오랫동안 검색해야했습니다 :)


2
여러 번 투표 할 수 있기를 바랍니다. 시간이 끝나고 한 시간이지나 이제 집에 갈 수 있습니다.
밥 조던

좋은 답변입니다! 짧고 간단합니다 ...이 위에 있어야합니다 ... 계속 투표하십시오.
무하마드 Tarique

이것은 내 경우에 효과적이었습니다. 감사합니다! 그러나 OP가 요청한 것처럼 표시된 텍스트가 아닌 OP 자체에없는 값 자체에 의해 선택되지 않습니까?
Brandon Rhodes

21
$("#myselect option:contains('YourTextHere')").val();

텍스트 설명이 포함 된 첫 번째 옵션의 값을 반환합니다. 이것을 테스트하고 작동합니다.


감사합니다-일치하는 텍스트가 없을 때 논리가 필요하기 때문에 이것이 내가 사용하는 버전 일 수 있다고 생각합니다.이 기능은 가장 쉬운 메커니즘으로 보입니다.
DanSingerman

1
텍스트와 일치하는 첫 번째 옵션의 값만 가져옵니다.
Russ Cam

또한 attr ( "selected", "selected") val () 대신 래핑 된 집합에 연결할 수 있으며 이는 CarolinaJay65의 답변과 유사합니다
Russ Cam

1
영업 이익은 말했다 " 설정 값이" 없습니다 " 점점 가치"
RousseauAlexandre

15

모든 jQuery 버전의 합병증을 피하려면 솔직히 이러한 간단한 자바 스크립트 함수 중 하나를 사용하는 것이 좋습니다 ...

function setSelectByValue(eID,val)
{ //Loop through sequentially//
  var ele=document.getElementById(eID);
  for(var ii=0; ii<ele.length; ii++)
    if(ele.options[ii].value==val) { //Found!
      ele.options[ii].selected=true;
      return true;
    }
  return false;
}

function setSelectByText(eID,text)
{ //Loop through sequentially//
  var ele=document.getElementById(eID);
  for(var ii=0; ii<ele.length; ii++)
    if(ele.options[ii].text==text) { //Found!
      ele.options[ii].selected=true;
      return true;
    }
  return false;
}

값 또는 텍스트를 통해 선택 옵션을 선택할 수 있습니다 (호출 기능에 따라 다름). 예를 들면 다음과 같습니다. setSelectByValue ( 'sausages', '2'); id가 "sausages"인 선택 개체에서 값이 "2"인 옵션을 찾아서 선택합니다.
Dave

2
@ 닐 어 ... 그것은 질문에 대답?
Mark Amery

10

나는 이것이 오래된 게시물이라는 것을 알고 있지만 jQuery 1.10.3과 위의 솔루션을 사용하여 텍스트로 선택할 수는 없습니다. 나는 다음 코드를 사용하여 끝났습니다 (스풀 슨 솔루션의 변형).

      var textToSelect = "Hello World";

      $("#myDropDown option").each(function (a, b) {
            if ($(this).html() == textToSelect ) $(this).attr("selected", "selected");
        });

그것이 누군가를 돕기를 바랍니다.



7
 $("#Test").find("option:contains('two')").each(function(){
     if( $(this).text() == 'two' ) {
        $(this).attr("selected","selected");
     }
 });

if 문은 "two"와 정확히 일치하고 "two three"는 일치하지 않습니다


아니, 그건 내가 의도 한 바가 아니야 내 의견이 약간 불분명 한 것 같아서 삭제했습니다. 나는 그것이 나의 상황에서 효과가 있었기 때문에 당신의 대답을 찬성했습니다.
Jagd

6

1.7 이상에서 가장 쉬운 방법은 다음과 같습니다.

$("#myDropDown option:text=" + myText +"").attr("selected", "selected"); 

1.9+

$("#myDropDown option:text=" + myText +"").prop("selected", "selected"); 

테스트하고 작동합니다.


1
1.9 이상에서는 그렇지 않습니다. 1.6부터는 HTML / DOM 속성이 .prop아닌 DOM 속성을 변경 하는 데 사용해야합니다 .attr. stackoverflow.com/q/5874652/1709587
Mark Amery

나는 "selected"의 진실한 가치 대신에 ( "selected", true)를 사용할 것이다
mplungjan


4

jquery selectedbox 플러그인을 살펴보십시오.

selectOptions(value[, clear]): 

문자열을 매개 변수 $("#myselect2").selectOptions("Value 1");또는 정규식 으로 사용하여 값을 기준으로 옵션을 선택하십시오 $("#myselect2").selectOptions(/^val/i);.

이미 선택된 옵션을 지울 수도 있습니다. $("#myselect2").selectOptions("Value 2", true);


3

부수적으로. 선택한 값이 설정되지 않았습니다. 그리고 나는 인터넷을 통해 검색했다. 실제로 웹 서비스에서 전화를 건 후 데이터를 가져 오기 때문에 값을 선택해야했습니다.

$("#SelectMonth option[value=" + DataFromWebService + "]").attr('selected', 'selected'); 
$("#SelectMonth").selectmenu('refresh', true);

그래서 선택기의 새로 고침은 내가 놓친 유일한 것입니다.


이것은 옳은 것입니다-완전히 ... 나는 두 번째 줄에 대한 이유가 없습니다. 있는 그대로 작동해야합니다.
Sagive SEO 23.38의

2

나는 attr당신이 원하지 않을 때 선택된 여러 옵션으로 끝나는 것을 발견했다 prop.

$("#myDropDown option:text=" + myText +"").prop("selected", "selected");


1

위의 예제에 문제가 있었고 문제는 선택 상자 값에 고정 길이 문자열 6 문자가 미리 채워져 있지만 전달되는 매개 변수가 고정 길이가 아니기 때문에 발생했습니다.

지정된 길이와 지정된 문자로 문자열을 오른쪽으로 채우는 rpad 함수가 있습니다. 따라서 매개 변수를 채우면 작동합니다.

$('#wsWorkCenter').val(rpad(wsWorkCenter, 6, ' '));


function rpad(pStr, pLen, pPadStr) {
if (pPadStr == '') {pPadStr == ' '};
while (pStr.length < pLen)
    pStr = pStr + pPadStr;
return pStr; 
} 

1
 $('#theYear').on('change', function () {
 FY = $(this).find('option:selected').text();
 $('#theFolders').each(function () {
     $('option:not(:contains(' + FY + '))', this).hide();
 });
 $('#theFolders').val(0);
});

$('#theYear').on('mousedown', function () {
 $('#theFolders option').show().find('option:contains("Select")', this).attr('selected', 'selected');
});

0

이 허용 된 대답은 정확하지 않은 것처럼 보이지만 .val ( 'newValue')은 함수에 정확하지만 이름으로 선택을 검색하려고하면 작동하지 않습니다 .ID와 클래스 이름을 사용하여 요소를 가져와야했습니다.


0

쉬운 옵션이 있습니다. 목록 옵션을 설정하고 텍스트를 선택한 값으로 설정하십시오.

$("#ddlScheduleFrequency option").selected(text("Select One..."));

-1

선택 상자의 자식을 얻습니다. 그들을 통해 루프; 원하는 것을 찾으면 선택한 옵션으로 설정하십시오. 루핑을 중지하려면 false를 반환합니다.

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