Вибір опції за текстовим вмістом за допомогою jQuery


76

Я хочу встановити випадаюче поле для того, що було передано через рядок запитів за допомогою jquery.

Як додати вибраний атрибут до такого параметра, що значення "ТЕКСТ" дорівнює певному параметру з рядка запиту?

 $(document).ready(function() {
        var cat = $.jqURL.get('category');
        if (cat != null) {
            cat = $.URLDecode(cat);
            var $dd = $('#cbCategory');
            var $options = $('option', $dd);
            $options.each(function() {
                if ($(this).text() == cat)
                    $(this).select(); // This is where my problem is
            });
        };
    });

Відповіді:


173

Замінити це:

var cat = $.jqURL.get('category');
var $dd = $('#cbCategory');
var $options = $('option', $dd);
$options.each(function() {
if ($(this).text() == cat)
    $(this).select(); // This is where my problem is
});

З цим:

$('#cbCategory').val(cat);

Зателефонувавши val()до вибраного списку, буде автоматично обрано опцію з цим значенням, якщо вона є.


2
я не можу зробити кілька варіантів, вибраних за допомогою цього підходу?
Akhi

2
Цей метод не ініціює події в елементі $ ('# cbCategory').
Яніс Грузіс,

15
Ця відповідь застаріла. Починаючи з jQuery 1.4, .valбуде вибирати параметри за їх текстовим вмістом, лише якщо вони не мають valueатрибута. Таким чином, у випадку, коли елементи опції мають атрибути значення і вони не відповідають їхньому текстовому змісту, надана тут відповідь не буде працювати.
Mark Amery

34

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

cat = $.URLDecode(cat);
$('#cbCategory option:contains("' + cat + '")').prop('selected', true);

У цьому випадку вам не потрібно переглядати всі варіанти each(). Хоча на той час prop()не існувало, тому для старих версій використання jQuery attr().


ОНОВЛЕННЯ

Ви повинні бути впевнені у використанні, containsоскільки ви можете знайти кілька варіантів, у випадку, якщо рядок всередині catзбігається з підрядком іншого варіанту, ніж той, якому ви збираєтесь відповідати.

Тоді ви повинні використовувати:

cat = $.URLDecode(cat);
$('#cbCategory option')
    .filter(function(index) { return $(this).text() === cat; })
    .prop('selected', true);

2
Дякуємо, що поділилися та постійно оновлюєте речі
Eric Herlitz,

20

Якщо ваші <option>елементи не мають valueатрибутів, ви можете просто використовувати .val:

$selectElement.val("text_you're_looking_for")

Однак, якщо ваші <option>елементи мають атрибути значення або можуть робити це в майбутньому, це не спрацює, оскільки, коли це можливо, .valбуде вибирати параметр за його valueатрибутом, а не за текстовим вмістом. Немає вбудованого методу jQuery, який буде вибирати параметр за його текстовим вмістом, якщо параметри мають valueатрибути, тому нам доведеться додати його самостійно за допомогою простого плагіна:

/*
  Source: https://stackoverflow.com/a/16887276/1709587

  Usage instructions:

  Call

      jQuery('#mySelectElement').selectOptionWithText('target_text');

  to select the <option> element from within #mySelectElement whose text content
  is 'target_text' (or do nothing if no such <option> element exists).
*/
jQuery.fn.selectOptionWithText = function selectOptionWithText(targetText) {
    return this.each(function () {
        var $selectElement, $options, $targetOption;

        $selectElement = jQuery(this);
        $options = $selectElement.find('option');
        $targetOption = $options.filter(
            function () {return jQuery(this).text() == targetText}
        );

        // We use `.prop` if it's available (which it should be for any jQuery
        // versions above and including 1.6), and fall back on `.attr` (which
        // was used for changing DOM properties in pre-1.6) otherwise.
        if ($targetOption.prop) {
            $targetOption.prop('selected', true);
        } 
        else {
            $targetOption.attr('selected', 'true');
        }
    });
}

Просто додайте цей плагін десь після того, як ви додасте jQuery на сторінку, а потім зробіть

jQuery('#someSelectElement').selectOptionWithText('Some Target Text');

, щоб вибрати опції.

Метод плагіна використовує, filterщоб вибрати лише optionвідповідний targetText, і вибирає його, використовуючи .attrабо .prop, залежно від версії jQuery ( для пояснення див. .Prop () проти .attr () ).

Ось JSFiddle, за допомогою якого можна зіграти з усіма трьома відповідями на це запитання, що демонструє, що цей єдиний надійно працює: http://jsfiddle.net/3cLm5/1/

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