Хорошо, скажи, что у меня есть это:
<select id='list'>
<option value='1'>Option A</option>
<option value='2'>Option B</option>
<option value='3'>Option C</option>
</select>
Как бы выглядел селектор, если бы я хотел получить «Вариант Б», когда у меня есть значение «2»?
Обратите внимание, что здесь спрашивается не, как получить текстовое значение выбранный, а просто любое из них, независимо от того, выбрано оно или нет, в зависимости от атрибута значения. Я старался:
$("#list[value='2']").text();
Но это не работает.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Он ищет элемент с идентификатором list, который имеет свойство value, равное 2.
.
Вам нужен option, дочерний элемент list:
$("#list option[value='2']").text()
Спасибо за этот никф. Вот расширенный ответ, если вы хотите получить значение динамически: var selectValue = document.getElementById ('list'). Value; var selectOption = $ ("# параметр списка [значение =" + selectValue + "]"). text (); /// хороший пример nickf.
@Kevin, в этом случае вы можете использовать ответ ниже этого. $('#list option:selected').text()
@nickf, и попроще, $('#list').val()
@Derek, val () не выдаст текст опции, а даст ее значение, которое в некоторых случаях (я осмелюсь сказать, что во многих случаях) не то же самое.
вы всегда должны использовать .trim() после .text(), поскольку некоторые браузеры могут иногда добавлять некоторые пробелы до и после текста, которые невидимы для пользователя, но могут привести к получению неверных значений $("#list option[value='2']").text().trim()
Попробуйте следующее:
$("#list option[value=2]").text();
Причина, по которой ваш исходный фрагмент не работал, заключается в том, что ваши теги OPTION являются дочерними по отношению к вашему тегу SELECT, который имеет idlist.
Если вы хотите получить опцию со значением 2, используйте
$("#list option[value='2']").text();
Если вы хотите получить тот вариант, который выбран в данный момент, используйте
$("#list option:selected").text();
Чтобы получить значение вместо текста, вам нужно будет написать: - $ ("select # list"). Val (); Я знаю, что это не настоящий ответ на заданный вопрос, но все же подумал об упоминании этого момента для новичков, приходящих через Google.
Я использую $ ("# list option: selected"). Text () и $ ("# list option: selected"). Attr ('value')
Для получения выделенного текста (даже если вопрос не об этом конкретно) этот метод лучше, потому что ему не нужно знать, каково выбранное значение.
$("#list [value='2']").text();
оставьте пробел после селектора идентификатора.
$("#list option:selected").each(function() {
alert($(this).text());
});
для множественного выбранного значения в элементе #list.
Я хотел получить выбранный лейбл. Это сработало для меня в jQuery 1.5.1.
$("#list :selected").text();
Основываясь на исходном HTML, опубликованном Паоло, я пришел к следующему.
$("#list").change(function() {
alert($(this).find("option:selected").text()+' clicked!');
});
Он был протестирован для работы в Internet Explorer и Firefox.
Альтернативой этому является: $ ("option: selected", this) .text ()
Это лучший ответ, поскольку он учитывает сложные сценарии, а не только статический HTML-код и простые события javascript.
Во время «цикла» по динамически созданным элементам выбора с .each (function () ...): $("option:selected").text(); и $(this + " option:selected").text() не возвращали текст выбранной опции - вместо этого он был нулевым.
Но решение Питера Мортенсена сработало:
$(this).find("option:selected").text();
Я не знаю, почему обычный способ не работает с .each() (вероятно, моя собственная ошибка), но спасибо, Питер. Я знаю, что это был не исходный вопрос, но я упоминаю его «для новичков, приходящих через Google».
Я бы начал с $('#list option:selected").each(), за исключением того, что мне нужно было брать данные и из элемента select.
Использовать:
function selected_state(){
jQuery("#list option").each(function(){
if (jQuery(this).val() == "2"){
jQuery(this).attr("selected","selected");
return false;
}
});
}
jQuery(document).ready(function(){
selected_state();
});
Это отлично сработало для меня, я искал способ отправить два разных значения с параметрами, сгенерированными MySQL, и следующее является общим и динамическим:
$(this).find("option:selected").text();Как упоминалось в одном из комментариев. Благодаря этому я смог создать динамическую функцию, которая работает со всеми моими полями выбора, которые я хочу получить как значения, так и значение параметра и текст.
Несколько дней назад я заметил, что при обновлении jQuery с 1.6 до 1.9 на сайте, где я использовал этот код, он перестал работать ... вероятно, был конфликт с другим фрагментом кода ... в любом случае, решение заключалось в том, чтобы удалить параметр из find () вызов:
$(this).find(":selected").text();
Это было моим решением ... используйте его, только если у вас возникнут проблемы после обновления jQuery.
предположительно, согласно WebStorm 8, это более эффективный способ сделать это.
Хотя этот ответ проницателен и помог мне с проблемой, с которой я столкнулся, к придиркам, он не отвечает должным образом на вопрос: Обратите внимание, что здесь спрашивается не о том, как получить выбранное текстовое значение, а просто любое из них, независимо от того, выбрано оно или нет, в зависимости от атрибута значения.
Мне нужна была динамическая версия для множественного выбора, которая отображала бы то, что выбрано справа (если бы я читал и видел $(this).find ... раньше):
<script type = "text/javascript">
$(document).ready(function(){
$("select[showChoices]").each(function(){
$(this).after("<span id='spn"+$(this).attr('id')+"' style='border:1px solid black;width:100px;float:left;white-space:nowrap;'> </span>");
doShowSelected($(this).attr('id'));//shows initial selections
}).change(function(){
doShowSelected($(this).attr('id'));//as user makes new selections
});
});
function doShowSelected(inId){
var aryVals=$("#"+inId).val();
var selText = "";
for(var i=0; i<aryVals.length; i++){
var o = "#"+inId+" option[value='"+aryVals[i]+"']";
selText+=$(o).text()+"<br>";
}
$("#spn"+inId).html(selText);
}
</script>
<select style = "float:left;" multiple = "true" id = "mySelect" name = "mySelect" showChoices = "true">
<option selected = "selected" value=1>opt 1</option>
<option selected = "selected" value=2>opt 2</option>
<option value=3>opt 3</option>
<option value=4>opt 4</option>
</select>
Если на странице есть только один тег выбора, вы можете указать выбор внутри списка идентификаторов.
jQuery("select option[value=2]").text();
Чтобы получить выделенный текст
jQuery("select option:selected").text();
В качестве альтернативного решения вы также можете использовать контекстная часть селектора jQuery для поиска элементов <option> с value = "2" внутри раскрывающегося списка:
$("option[value='2']", "#list").text();
Мне нужен был этот ответ, так как я имел дело с динамически приведенным объектом, а другие методы здесь, похоже, не работали:
element.options[element.selectedIndex].text
Это, конечно, использует объект ДОМ вместо синтаксического анализа его HTML с помощью nodeValue, childNodes и т. д.
$(this).children(":selected").text()
К сожалению, это не работает, если у вас есть тег optgroup как дочерний для вашего select, и выбранный вариант находится в этом optgroup. используйте $("#list option:selected").text();, который работает даже в этом случае
Я искал получить val по внутреннему имени поля вместо идентификатора и пришел из Google в этот пост, который помог, но не нашел нужного мне решения, но я получил решение, и вот оно:
Таким образом, это может помочь кому-то, кто ищет выбранное значение с внутренним именем поля вместо использования длинного идентификатора для списков SharePoint:
var e = $('select[title = "IntenalFieldName"] option:selected').text();
Твердый раствор. Извините, это в таком секретном месте здесь. Возможно, вы захотите найти более заметное место для предоставления этого решения. Может быть, вы могли бы задать свой вопрос и ответить на него?
Это старый вопрос, который некоторое время не обновлялся. Правильный способ сделать это сейчас - использовать
$("#action").on('change',function() {
alert($(this).find("option:selected").text()+' clicked!');
});
Надеюсь, это поможет :-)
Это точно не правильно Обратите внимание, что здесь не спрашивается, как получить выбранное текстовое значение.
Совет: вы можете использовать приведенный ниже код, если ваше значение динамическое:
$("#list option[value='"+aDynamicValue+"']").text();
Или (лучший стиль)
$("#list option").filter(function() {
return this.value === aDynamicValue;
}).text();
Как упомянуто в jQuery получает конкретный текст тега опции и помещает динамическую переменную в значение
Вы можете получить выбранный текст опции, используя функцию .text();
вы можете вызвать функцию так:
jQuery("select option:selected").text();
Вы можете получить один из следующих способов
$("#list").find('option').filter('[value=2]').text()
$("#list").find('option[value=2]').text()
$("#list").children('option[value=2]').text()
$("#list option[value='2']").text()
$(function(){
console.info($("#list").find('option').filter('[value=2]').text());
console.info($("#list").find('option[value=2]').text());
console.info($("#list").children('option[value=2]').text());
console.info($("#list option[value='2']").text());
});<script src = "//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<select id='list'>
<option value='1'>Option A</option>
<option value='2'>Option B</option>
<option value='3'>Option C</option>
</select>Пытаться
[...list.options].find(o=> o.value=='2').text
let text = [...list.options].find(o=> o.value=='2').text;
console.info(text);<select id='list'>
<option value='1'>Option A</option>
<option value='2'>Option B</option>
<option value='3'>Option C</option>
</select>Попробуй это:
jQuery("#list option[value='2']").text()
На этот период времени используйте:
$("#list option").filter(function () { return $(this).html() == "stuff"; }).val();.