2015-09-14 1 views
3

HTMLселектор Jquery - текст равно - не работает

<select id="myDDL"> 
    <option selected="selected" value="0">default</option> 
    <option value="1">apples</option> 
    <option value="2">oranges</option> 
</select> 

Javascript

setFieldValue("myDDL", "apples"); 

function setFieldValue(field, value) 
{ 
    var val = $("#" + field + " option[text]"); 
    console.log(val); 
    $("#" + field).val(val); 
} 

JSFiddle

https://jsfiddle.net/nnvh7e43/

Я хотел бы, чтобы выбрать опцию в поле выбора на основе его текста, а именно:

var val = $("#" + field + " option[text='" + value + "']"); 

Однако, как только я добавить [текст] после того, как опция селектор, кажется, чтобы выбрать весь документ, в то время как $ (» # "+ поле +" вариант "); просто выбирает все теги параметров в поле выбора, как и следовало ожидать.

Не могли бы вы объяснить, почему он не распознает «[текст]» и как я могу это исправить?

Благодаря

+0

возможно дубликат [JQuery найти элемент по тексту] (http://stackoverflow.com/questions/7321896/jquery-find-element-by-text) – Andrey

+0

возможно дубликат [JQuery - настройка выбранное значение элемента управления select через его текстовое описание] (http: // stackoverflow.com/questions/496052/jquery-setting-the-selected-value-of-a-select-control-via-its-text-description) – PeterKA

ответ

5

apples является текст опции, а не его значение. Вы должны использовать функцию .filter() здесь:

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

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

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

Working Demo

2

Селектор [] CSS можно использовать только по атрибутам (href, selected, value, class, id , ...). Вы не можете использовать его в содержимом элемента html.

Решение Milind Anantwar - это путь. Используйте filter:

$("#" + field + " option").filter(function(){ 
    return $(this).text() === value ; 
}); 
2

Вы можете сделать это:

function setFieldValue(field, value) { 

    // First filter all option by text, then get that option value 
    var val = $("#" + field + " option").filter(function() { 
     return $.trim($(this).text()) == value; 
    }).val(); 
    console.log(val); 

    // Set the option w/ text value here 
    $("#" + field).val(val); 
} 

FIDDLE DEMO

0

селекторы как tagname[attributename] ищет фактический атрибут на tagname элемента. Элементы вашего option не имеют атрибута text. Поэтому вам нужно либо дать им атрибут text, либо, возможно, предпочтительнее изменить свой селектор, чтобы изучить фактический внутренний текст элемента, а не искать атрибут, например. с contains:

var val = $("#" + field + " option:contains(" + value + ")"); 
+0

будет ломаться, когда появится опция 'custard apples' –

+0

Да, я собирался сказать, что я умышленно избегается, потому что мне нужно точное совпадение, хотя я понимаю, что я никогда не говорил об этом в вопросе – AndrewB

Смежные вопросы