jQuery выбирает и фильтрует содержимое <option> - PullRequest
1 голос
/ 20 декабря 2009

У меня есть следующее выпадающее меню:

<select id="target">
    <option value="0">Zero ($123.45)</option>
    <option value="1">One ($99.99)</option>
    <option value="2">Two ($4.50)</option>
</select>

Как с помощью jQuery выбрать содержимое скобок () выбранной опции, т. Е. 123.45, 99.99 или 4.50?

Пока у меня есть:

$("select#target option:selected").contents();

Это просто дает Zero ($123.45) или эквивалент, хотя. Как я могу отфильтровать его, чтобы получить номер, который я ищу?

Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 20 декабря 2009

Вы также можете просто использовать эти долларовые значения в качестве атрибута значения для каждого:

<option value="$123.45">Zero ($123.45)</option>
    etc...

затем используйте этот jQuery, чтобы получить его:

var a = $('select#target option:selected').attr('value');
4 голосов
/ 20 декабря 2009

Попробуйте:

var a = $("select#target option:selected").contents();
var bracketed = a.replace(/\(([^)]*)\)/g, "$1");

Или, если вы не хотите использовать регулярное выражение:

var a = $("select#target option:selected").contents();
var bracketed = a.split('(')[1].split(')')[0];
3 голосов
/ 20 декабря 2009

Я думаю, что самый идиоматический способ сделать это с помощью jQuery -

$("#target :selected").text().match(/\((.+)\)/).pop()

Регулярные выражения, как правило, являются лучшим способом сопоставления текста в Javascript, и этот стиль кода соответствует обычному стилю цепочки методов jQuery, не вводит лишних локальных переменных и не включает в себя некрасивую операцию разыменования индекса. Я также написал селектор в более компактной форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...