jQuery отримати конкретний текст тегу опцій


1234

Добре, скажіть, у мене це:

<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();
грак

Відповіді:


1122

Він шукає елемент з id, у listякого властивість valueдорівнює 2.
Що ви хочете, це optionдитина list:

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

4
Дякую за цю нікферу. Ось ця відповідь розширюється, якщо ви хочете динамічно отримувати значення: var selectValue = document.getElementById ('список'). Value; var selectOption = $ ("# list list [value =" + selectValue + "]"). text (); /// хороший приклад nickf.
Кевін Флорида

283
@Kevin, у такому випадку ви можете скористатися відповіддю нижче цього. $('#list option:selected').text()
nickf

6
@nickf та ще простіше,$('#list').val()
Дерек 朕 會 功夫

36
@Derek, val () не надасть тексту опції, він дасть своє значення, яке в деяких випадках (багато хто наважуюся сказати) не є однаковим.
itsmequinn

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

1262

Якщо ви хочете отримати опцію зі значенням 2, використовуйте

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

Якщо ви хочете отримати будь-який варіант, обраний на даний момент, скористайтеся

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

11
Щоб отримати значення замість тексту, вам потрібно буде написати: - $ ("вибрати # список"). Val (); Я знаю, що це не фактична відповідь на поставлене запитання, але все ж я думав згадати цей момент для новачків, які надходять через Google.
Тяга до знань

Я використовую $ ("опція # списку: вибрано"). Text () та $ ("# параметр списку: вибрано"). Attr ('value')
fullstacklife

Отримавши вибраний текст (навіть якщо запитання не задавали цього конкретно), цей метод є кращим, оскільки не потрібно знати, що таке вибране значення.
theJerm

132

Це прекрасно працювало для мене, я шукав спосіб надіслати два різних значення з параметрами, згенерованими MySQL, і наступне є загальним та динамічним:

$(this).find("option:selected").text();

Як згадується в одному з коментарів. Завдяки цьому я зміг створити динамічну функцію, яка працює з усіма моїми вікнами вибору, що я хочу отримати як значення, так і значення параметра та текст.

Кілька днів тому я помітив, що при оновленні jQuery з 1.6 на 1.9 я використовував цей код, ця зупинка роботи ... ймовірно, була конфлікт з іншим фрагментом коду ... все одно, рішенням було видалити варіант find () call:

$(this).find(":selected").text();

Це було моє рішення ... використовуйте його, лише якщо у вас виникли проблеми після оновлення jQuery.


2
нібито це більш ефективний спосіб зробити це відповідно до WebStorm 8.
dbinott

2
Хоча ця відповідь проникливий і допомагає мені зіткнутися з проблемою, яку я зіткнувся, він не відповідає належним чином на запитання: Зверніть увагу, що це не питання про те, як отримати вибране значення тексту, а лише будь-яке з них, незалежно від того, вибране чи ні, залежно від атрибута значення.
StubbornShowaGuy

109

На основі оригіналу HTML, опублікованого Паоло, я придумав таке.

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

Він перевірений для роботи на Internet Explorer та Firefox.


11
Альтернатива цьому: $ ("варіант: вибрано", це) .text ()
Doug S

Це краща відповідь, тому що вона містить складні сценарії, а не просто статичний html та прості події javascript.
оазисфлетіння

37
$("#list option:selected").each(function() {
   alert($(this).text());
});  

для декількох вибраних значень в #listелементі.


37
  1. Якщо на сторінці є лише один тег вибору, ви можете вказати виділити всередині id 'list'

    jQuery("select option[value=2]").text();
  2. Щоб отримати вибраний текст

    jQuery("select option:selected").text();

24

Спробуйте наступне:

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

Причина, по якій ваш оригінальний фрагмент не працював, полягає в тому, що ваші OPTIONтеги є дітьми до вашого SELECTтегу, який має id list.


19

Це старе запитання, яке не оновлювалося протягом певного часу, правильним способом цього зараз було б користуватися

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

Я сподіваюся, що це допомагає :-)


Це, безумовно, неправильно. Зауважте, що це питання не про те, як отримати вибране значення тексту
Wesley Smith

17

Я хотів отримати вибрану етикетку. Це працювало для мене в jQuery 1.5.1.

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

17
$(this).children(":selected").text()

На жаль, це не спрацьовує, коли ви маєте optgroupтег як дитина своєї дитини selectта вибраний варіант у цьому optgroup. використання $("#list option:selected").text();якого працює навіть у цьому випадку
MartinM

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

залиште пробіл після селектора id.


13

Ви можете отримати вибраний текст опції за допомогою функції .text();

Ви можете викликати функцію так:

jQuery("select option:selected").text();

10

Під час "циклу" через динамічно створені виділені елементи з .each (функцією () ...): $("option:selected").text();і $(this + " option:selected").text()не повертає вибраний текст опції - натомість він був нульовим.

Але рішення Пітера Мортенсена спрацювало:

$(this).find("option:selected").text();

Я не знаю, чому звичайним способом не вдасться .each()(мабуть, моя власна помилка), але дякую, Пітер. Я знаю, що це не було первісне питання, але я згадую його "для новачків, які надходять через Google".

Я б почав з $('#list option:selected").each()того, що мені потрібно було також взяти речі з елемента вибору.


8

Використання:

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

5

Я шукав вал за назвою внутрішнього поля замість ідентифікатора і прийшов від google до цієї публікації, яка допомагає, але не знайшла потрібного рішення, але я отримала рішення, і ось воно:

Тож це може допомогти тому, хто шукає вибране значення із внутрішнім іменем поля замість того, щоб використовувати довгий ідентифікатор для списків SharePoint:

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

Твердий розчин. Вибачте, що в такому секретному місці тут. Можливо, ви хочете знайти більш помітне місце для надання цього рішення. Може, ви могли б задати і відповісти на власне запитання?
Андрій Козак

4

Ця відповідь мені була потрібна, оскільки я мав справу з об'єктом, який динамічно кидається, а інші методи тут, схоже, не спрацювали:

element.options[element.selectedIndex].text

Звичайно, використовується об'єкт DOM замість того, щоб проаналізувати його HTML за допомогою nodeValue, childNodes тощо.


4

Порада: ви можете використовувати код нижче, якщо ваше значення динамічне:

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

Або (кращий стиль)

$("#list option").filter(function() {
     return this.value === aDynamicValue;
}).text();

Як згадується в jQuery, отримайте текст тегів конкретного параметра та розміщення динамічної змінної до значення



2

Я хотів динамічну версію для вибору декількох, яка б відображала те, що вибрано праворуч (я б хотів, щоб я читав і бачив $(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>

2

Ви можете отримати один із наступних способів

$("#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.log($("#list").find('option').filter('[value=2]').text());
    console.log($("#list").find('option[value=2]').text());
    console.log($("#list").children('option[value=2]').text());
    console.log($("#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>

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