2014-10-31 5 views
1

Я попытался найти опцию базы индексов по тексту опции. Мой код HTML ниже.Как получить индекс опциона на основе текста опции

<select multiple="multiple" onchange="dependentOptions.select(this); opConfig.reloadPrice();optionImages.showImage(this);" title="" class="multiselect product-custom-option" id="select_472" name="options[472][]" > 
<option selected="selected" value="3364">Black </option> 
<option selected="selected" value="3365">White </option> 
<option value="3366">Cool Grey #9 </option> 
<option value="3367">Red </option> 
<option value="3368">Fire Red </option> 
<option value="3369">Orange </option> 
<option value="3370">Rich Yellow </option> 
<option value="3371">Primrose Yellow </option> 
<option value="3372">Light Green </option> 
</select> 

и мой сценарий, как этот

jQuery("#select_472 select option:[text=Rich Yellow]").index(); 

но вернуть меня -1 InstEd из 7

Так что, пожалуйста, помогите мне sove это.

+0

Второй 'select' неверен в выборе jQuery, вы должны удалить его. – alalp

+0

Некоторые другие варианты здесь: http://stackoverflow.com/questions/813477/jquery-selector-where-text-some-value – Will

+0

Помните, что индекс основан на нулевом значении, поэтому здесь будет 6 не 7 –

ответ

2

Вы могли бы использовать :contains псевдо-селектор:

jQuery("#select_472 option:contains('Rich Yellow')").index(); 
+0

Может быть вопрос с ': contains', например, между Fire Red и Red –

+0

@ A.Wolff Да, это хороший момент! Фильтр - лучший выбор здесь. – dfsq

1

Индекс должен быть начался 0, поэтому текст 'Rich желтый' быть позиция индекса 6.

$("#select_472 option[value='3370']").index(); 

$("#select_472 option:contains('Rich Yellow ')").index(); 

Fiddle

+1

'на основе текста опции'. Вы теряете значение, а не текст. –

+0

Тот, который связан с «значением = ...», именно то, что я искал. Все остальные ответы на SO, некоторые из которых очень умны, что я нашел для достижения этой задачи, как представляется, используют переборную настройку. Но ваш способ получить индекс от значения (видимо) не делает. Поэтому я задевал вас, несмотря на то, что не ответил на конкретный вопрос OP! –

1

Вы можете отфильтровать его (и обрезать текстовое значение), выглядит более безопасным:

jQuery("#select_472 option").filter(function(){ 
    return $.trim($(this).text()) === "Rich Yellow" 
}).index(); 
Смежные вопросы