2015-04-06 5 views
1

У меня есть выпадающий список:Как добавить атрибут к каждому варианту списка

<select> 
    <option value=""></option> 
    <option value="Bla">Bla</option> 
    <option value="Foo">Foo</option> 
</select>   

Использование JQuery Я хочу изменить свой список, перечисляя каждый параметр путем добавления пользовательских атрибутов level так мой выбор будет выглядеть что и необходимо пропустить первый вариант списка:

<select> 
    <option value=""></option> //skipping the first one 
    <option value="Bla" level="1">Bla</option> 
    <option value="Foo" level="2">Foo</option> 
</select> 

Как я могу это сделать с помощью jQuery?

+0

Так что вы хотите сделать с 'jQuery'? –

ответ

2

Вы можете перебрать все опции с индексом 1 до п, используя $('select option:gt(0)'):

$('select option:gt(0)').attr('level',function(i){ 
    return i+1; 
}); 

Working Demo

или

$('select option:gt(0)').each(function(i){ 
    $(this).attr('level',i+1) 
}); 

Working Demo

1
$('select').children('option').each(function(index, element) { 
    if (index) $(element).attr('level', index); 
}); 
1

Вы можете использовать .attr()

$('select option:not(:first-child)').attr('level', function (i) { 
    return i + 1 
}) 
1

его лучше использовать data-* атрибут предоставленный html5:

$('select option').filter(':not(:first)').attr('data-level', function(i) { 
 
    return $(this).index(); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 

 
<select> 
 
    <option value=""></option> <!--this has index = 0--> 
 
    <option value="Bla">Bla</option><!--this has index = 1--> 
 
    <option value="Foo">Foo</option><!--this has index = 2--> 
 
</select>

Как вы можете видеть в Js со de есть использование метода jQuery attr(), и вы можете заметить, что он принимает функцию обратного вызова, чтобы вернуть значение атрибута при некоторой операции, если это необходимо.
В этом конкретном случае мы используем .index()option, доступный в заданном select, а в обратном вызове для применения атрибута необходим оператор return.

+0

не могли бы вы объяснить, почему вы возвращаете 'return $ (this) .index();' и если я не буду тогда, какую проблему я получу? – SpringLearner

+0

@SpringLearner '.index()' возвращает индекс позиции, как вы можете видеть это в комментариях. – Jai

1

Попробуйте

$('select option').each(function(index,item){ 
    if(index>0) 
    { 
     $(item).attr('level',index); 
    } 
}) 

Demo

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