Як отримати вибраний параметр $ (цей) у jQuery?


91

Працює такий код:

$("#select-id").change(function(){
  var cur_value = $('#select-id option:selected').text();
  . . .
});

Як здійснити рефакторинг другого рядка, щоб:

var cur_value = $(this).***option-selected***.text();

Для чого ти використовуєш ***option-selected***?

Відповіді:


120

Для вибраного значення: $(this).val()

Якщо вам потрібен вибраний елемент опції, $("option:selected", this)


101
 $(this).find('option:selected').text();

У мене це спрацювало ідеально - я намагався, $("option:selected", this)як уже згадувалося вище, але це було проблематично. Я використовував клацання кнопки, щоб додати текст вибраного елемента опції до іншого div, але коли я натиснув кнопку, це насправді змінило вибраний елемент ... дивно. Використовуйте цей.
skwidbreth,

53

На мою думку, найкращий та найкоротший шлях для подій onchange у випадаючому списку, щоб отримати вибраний варіант:

$('option:selected',this);

щоб отримати атрибут value:

$('option:selected',this).attr('value');

щоб отримати показану частину між тегами:

$('option:selected',this).text();

У вашому зразку:

$("#select-id").change(function(){
  var cur_value = $('option:selected',this).text();
});

Не використовуйте .context, це застаріло, оскільки jQuery 1.10 - api.jquery.com/category/deprecated/deprecated-1.10
rafx

Так, але ви маєте на увазі це: api.jquery.com/context $ ("ul", document.body) .context.nodeName, яким я не користуюся
angelmedia

1
Мені подобається відповідь, але чому вона найкраща?
Себастьян Гікель,



9

Ви можете використовувати findдля пошуку вибраний параметр, який є нащадком вузла (ів), на який вказує поточний об’єкт jQuery:

var cur_value = $(this).find('option:selected').text();

Оскільки це, швидше за все, безпосередня дитина, я б фактично запропонував використовувати .childrenзамість цього:

var cur_value = $(this).children('option:selected').text();

7
var cur_value = $(this).find('option:selected').text();

Оскільки ви можете optionбути безпосередньою дитиною, selectви також можете використовувати:

var cur_value = $(this).children('option:selected').text();

http://api.jquery.com/find/


Де ви берете option-selectedбез цитат ...?
Platinum Azure

Це була помилка, коли я розміщував повідомлення. Виправили відповідь.
thomthom,

find('option:selected')повертає для мене порожній рядок. Яка версія jQuery потрібна? Я працюю в 1.6.1. children('option:selected')працює.
B Сім

option:selectedбув там з v1.0 api.jquery.com/selected-selector
thomthom

0

Найкраще здогадка:

var cur_value = $('#select-id').children('option:selected').text();

У цьому випадку мені більше подобаються діти, бо ти знаєш, що йдеш лише однією гілкою вниз по дереву DOM ...


Можливо, ви насправді мали на увазі var cur_value = $ (this) .children ('option: selected'). Text ();
Джо Джонстон,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.