2015-04-24 3 views
2

Могу ли я получить значение поля выбора из данного текста в поле выбора? Нужна помощьМогу ли я получить значение поля выбора из заданного текста окна выбора

<select id='list'> 
<option value='1'>Option A</option> 
<option value='2'>Option B</option> 
<option value='3'>Option C</option> 
</select> 

$("#list[text='Option B']").val(); 
+0

я хочу, чтобы выберите значение окна, но у меня есть текст только :( –

ответ

4

Вы можете использовать фильтр:

$("#list option").filter(function(){ 
    return $(this).text().trim() == 'Option B'; 
}).val(); 

Вы также можете использовать $("#list option:contains(Option B)"), но это принесет несколько результатов в вашем случае.

+0

Это лучший ответ, более точный, чем использование ': contains' – dave

+0

@dave http://jsfiddle.net/5cy9tt2o/4/ – guest271314

+0

@dave' trim() 'решает эту проблему – renakre

4

Попробуйте

$("#list option:contains(Option B)").val(); 

Редактировать, Обновлено

Как указал @dfsq, комментируя оригинальный ответ

не очень надежны, как это также будет много «Option Boom». фильтр может быть лучший вариант.

тесты http://jsfiddle.net/5cy9tt2o/1/

Кроме того,

потому что :contains селектор просто проверяет indexOf вхождений. См. источник его here. ... обычно это не проблема, просто> что-то нужно знать.

где ":contains селектор просто проверяет indexOf вхождений" не появляется documentation?


Использование .filter() может также возвращать «ненадежные» результаты, если конкретное найдено совпадение, или не нашло, по предоставленному матчу искать в пределах данного текста элемента.

Например, @dfsq в пример

$("#list option:contains(Option B)").val(); 

соответствия

"Option Boom" 

Принятый ответ, хотя использование .filter() может не возвращать ожидаемые результаты, если " " появились после того, как text

<option value='2'>Option B </option> 

тесты http://jsfiddle.net/5cy9tt2o/4/


Альтернативный подход, который следует ожидать возвращения точное совпадение, не вызывая сложение внутренних методов; хотя параметры RegExp, или любые другие настройки, могут, конечно, быть дополнительными.

Базовый и первичный фокус метода, чтобы возвращать точное соответствие, если это возможно, текста, переданного методу.

Учитывая html от первоначальной должности, модифицированной же условия испытаний пытались при температуре выше,

<select id='list'> 
<option value='1'>Option Boom</option> 
<option value='2'>Option B</option> 
<option value='3'>Option C </option> 
</select> 

JS

(function($) { 
    $.fn.tryToMatchExactText = function (text) { 
    return $("*").filter(function(i, el) { 
     return el.textContent.match(new RegExp("^"+text+"$")) !== null 
    }) 
    }; 
}(jQuery)); 

var list = $("#list option"); 

console.log(list.tryToMatchExactText("Option B").val() // `"2"` 
     , list.tryToMatchExactText("Option Boom").val() // `"1"` 
     , list.tryToMatchExactText("Option C").val() // `undefined` 
     , list.tryToMatchExactText("Option C ").val() // `"3"` 
); 

тестов http://jsfiddle.net/5cy9tt2o/3/

+0

не очень надежны, так как она также будет много «Option Boom» 'filter' может быть лучшим вариантом.. – dfsq

+0

@dfsq На практике это обычно не проблема. – Barmar

+0

@dfsq http://jsfiddle.net/5cy9tt2o/ – guest271314

0

Go For:

$("#list").children().eq(2).val(); 
+1

Если он знал какой вариант это было, он мог просто использовать '2', ему не пришлось бы искать соответствующий текст. – Barmar

+0

@ Barmar Вы правы! Поэтому я думаю, что .filter() - хороший ответ здесь. – Aartz

Смежные вопросы