Как выбрать опцию по ее тексту?



мне нужно проверить, если a <select> имеет опцию, текст которой равен определенному значению.



например, если есть <option value="123">abc</option>, Я бы искал "abc".



есть ли селектор для этого?



Я ищу что-то похожее на $('#select option[value="123"]'); но для текста.

538   15  

15 ответов:

это может помочь:

$('#test').find('option[text="B"]').val();

демо-скрипка

это даст вам возможность с текстом B и не те, которые имеют текст, который содержит B. Надеюсь, это поможет

для последних версий jQuery выше не работает. прокомментировал тупик ниже, это то, что работает для jQuery 1.9.1:

$('#test option').filter(function () { return $(this).html() == "B"; }).val();

обновленный скрипку

можно использовать :contains() селектор для выбора элементов, содержащих определенный текст.
Например:

$('#mySelect option:contains(abc)')

чтобы проверить, является ли данный <select> элемент имеет такую возможность, используйте .has() метод:

if (mySelect.has('option:contains(abc)').length)

найти все <select>s, которые содержат такую опцию, используйте :has() селектор:

$('select:has(option:contains(abc))')

ни одно из предыдущих предложений не работало для меня в jQuery 1.7.2, потому что я пытаюсь установить выбранный индекс списка на основе значения из текстового поля, а некоторые текстовые значения содержатся в нескольких вариантах. В итоге я использовал следующее:

$('#mySelect option:contains(' + value + ')').each(function(){
    if ($(this).text() == value) {
        $(this).attr('selected', 'selected');
        return false;
    }
    return true;
});

это сработало для меня:$("#test").find("option:contains('abc')");

я столкнулась с той же проблемой ниже рабочий код :

$("#test option").filter(function() {
    return $(this).text() =='Ford';
}).prop("selected", true);

Demo:http://jsfiddle.net/YRBrp/83/

Это лучший метод для выделения текста в выпадающем списке.

$("#dropdownid option:contains(your selected text)").attr('selected', true);

я попробовал несколько из этих вещей, пока я не получил один для работы в Firefox и IE. Вот что я придумал.

$("#my-Select").val($("#my-Select" + " option").filter(function() { return this.text == myText }).val());

другой способ написания его в более читаемом fasion:

var valofText = $("#my-Select" + " option").filter(function() {
    return this.text == myText
}).val();
$(ElementID).val(valofText);

псевдокод:

$("#my-Select").val( getValOfText( myText ) );

использовать следующий

$('#select option:contains(ABC)').val();

Это будет работать в jQuery 1.6 (обратите внимание на двоеточие перед открывающей скобкой), но не работает в более новых версиях (1.10 в то время).

$('#mySelect option:[text=abc]")

для jquery версии 1.10.2 ниже работал для меня

  var selectedText="YourMatchText";
    $('#YourDropdownId option').map(function () {
       if ($(this).text() == selectedText) return this;
      }).attr('selected', 'selected');
    });

эта работа для меня

$('#mySelect option:contains(' + value + ')').attr('selected', 'selected');

либо вы повторяете параметры, либо помещаете тот же текст в другой атрибут опции и выбираете с ним.

Это тоже будет работать.

$('#test').find ("select option:contains ('B')").filter (": selected");

как описано в ответ, вы можете легко создать свой собственный селектор для hasText. Это позволяет найти вариант с $('#test').find('option:hastText("B")').val();

вот метод hasText, который я добавил:

 if( ! $.expr[':']['hasText'] ) {
     $.expr[':']['hasText'] = function( node, index, props ) {
       var retVal = false;
       // Verify single text child node with matching text
       if( node.nodeType == 1 && node.childNodes.length == 1 ) {
         var childNode = node.childNodes[0];
         retVal = childNode.nodeType == 3 && childNode.nodeValue === props[3];
       }
       return retVal;
     };
  }

это работает для меня

var options = $(dropdown).find('option');
var targetOption = $(options).filter(
function () { return $(this).html() == value; });

console.log($(targetOption).val());

Спасибо за все посты.

Comments

    Ничего не найдено.