JQuery получить конкретный текст тега опции

Хорошо, скажи, что у меня есть это:

<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();

Но это не работает.

На этот период времени используйте: $("#list option").filter(function () { return $(this).html() == "stuff"; }).val();.

rook 15.08.2013 16:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1 257
1
1 072 664
22
Перейти к ответу Данный вопрос помечен как решенный

Ответы 22

Ответ принят как подходящий

Он ищет элемент с идентификатором list, который имеет свойство value, равное 2.
. Вам нужен option, дочерний элемент list:

$("#list option[value='2']").text()

Спасибо за этот никф. Вот расширенный ответ, если вы хотите получить значение динамически: var selectValue = document.getElementById ('list'). Value; var selectOption = $ ("# параметр списка [значение =" + selectValue + "]"). text (); /// хороший пример nickf.

Kevin Florida 05.04.2011 17:48

@Kevin, в этом случае вы можете использовать ответ ниже этого. $('#list option:selected').text()

nickf 05.04.2011 20:10

@nickf, и попроще, $('#list').val()

Derek 朕會功夫 29.04.2012 03:38

@Derek, val () не выдаст текст опции, а даст ее значение, которое в некоторых случаях (я осмелюсь сказать, что во многих случаях) не то же самое.

itsmequinn 10.01.2013 18:39

вы всегда должны использовать .trim() после .text(), поскольку некоторые браузеры могут иногда добавлять некоторые пробелы до и после текста, которые невидимы для пользователя, но могут привести к получению неверных значений $("#list option[value='2']").text().trim()

Hassan ALAMI 20.08.2019 11:52

Попробуйте следующее:

$("#list option[value=2]").text();

Причина, по которой ваш исходный фрагмент не работал, заключается в том, что ваши теги OPTION являются дочерними по отношению к вашему тегу SELECT, который имеет idlist.

Если вы хотите получить опцию со значением 2, используйте

$("#list option[value='2']").text();

Если вы хотите получить тот вариант, который выбран в данный момент, используйте

$("#list option:selected").text();

Чтобы получить значение вместо текста, вам нужно будет написать: - $ ("select # list"). Val (); Я знаю, что это не настоящий ответ на заданный вопрос, но все же подумал об упоминании этого момента для новичков, приходящих через Google.

Knowledge Craving 20.06.2010 00:50

Я использую $ ("# list option: selected"). Text () и $ ("# list option: selected"). Attr ('value')

fullstacklife 24.02.2011 20:10

Для получения выделенного текста (даже если вопрос не об этом конкретно) этот метод лучше, потому что ему не нужно знать, каково выбранное значение.

theJerm 13.09.2012 02:32

$("#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 ()

Doug S 19.08.2013 00:05

Это лучший ответ, поскольку он учитывает сложные сценарии, а не только статический HTML-код и простые события javascript.

oasisfleeting 13.05.2015 07:26

Во время «цикла» по динамически созданным элементам выбора с .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, это более эффективный способ сделать это.

dbinott 01.10.2014 18:59

Хотя этот ответ проницателен и помог мне с проблемой, с которой я столкнулся, к придиркам, он не отвечает должным образом на вопрос: Обратите внимание, что здесь спрашивается не о том, как получить выбранное текстовое значение, а просто любое из них, независимо от того, выбрано оно или нет, в зависимости от атрибута значения.

StubbornShowaGuy 27.05.2016 03:40

Мне нужна была динамическая версия для множественного выбора, которая отображала бы то, что выбрано справа (если бы я читал и видел $(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;'>&nbsp;</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>
  1. Если на странице есть только один тег выбора, вы можете указать выбор внутри списка идентификаторов.

    jQuery("select option[value=2]").text();
    
  2. Чтобы получить выделенный текст

    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();, который работает даже в этом случае

MartinM 02.03.2017 17:45

Я искал получить val по внутреннему имени поля вместо идентификатора и пришел из Google в этот пост, который помог, но не нашел нужного мне решения, но я получил решение, и вот оно:

Таким образом, это может помочь кому-то, кто ищет выбранное значение с внутренним именем поля вместо использования длинного идентификатора для списков SharePoint:

var e = $('select[title = "IntenalFieldName"] option:selected').text(); 

Твердый раствор. Извините, это в таком секретном месте здесь. Возможно, вы захотите найти более заметное место для предоставления этого решения. Может быть, вы могли бы задать свой вопрос и ответить на него?

Andrew Kozak 30.12.2013 13:35

Это старый вопрос, который некоторое время не обновлялся. Правильный способ сделать это сейчас - использовать

$("#action").on('change',function() {
    alert($(this).find("option:selected").text()+' clicked!');
});

Надеюсь, это поможет :-)

Это точно не правильно Обратите внимание, что здесь не спрашивается, как получить выбранное текстовое значение.

Wesley Smith 19.08.2016 02:39

Совет: вы можете использовать приведенный ниже код, если ваше значение динамическое:

$("#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()

Другие вопросы по теме