@harts_1493

Как с помощью jquery сгруппировать option в optgroup?

Как обернуть тегом optgroup теги option, у которых схожий атрибут data-mark?

<select name="auto_model" class="form-control">
<option value="" data-mark="not" selected="">Выберите из списка</option>
<option value="Audi||A6, III (C6) Рестайлинг" data-mark="Audi" class="">A6, III (C6) Рестайлинг</option>
<option value="BMW||X3, II (F25)" data-mark="BMW" class="">X3, II (F25)</option>
<option value="Chery||Tiggo (T11), I" data-mark="Chery" class="">Tiggo (T11), I</option>
<option value="Chevrolet||Cruze, I" data-mark="Chevrolet" class="">Cruze, I</option>
<option value="Chevrolet||Cruze, I Рестайлинг" data-mark="Chevrolet" class="">Cruze, I Рестайлинг</option>
<option value="Chevrolet||Lacetti, Lacetti" data-mark="Chevrolet" class="">Lacetti, Lacetti</option>
<option value="Chevrolet||Niva, I Рестайлинг" data-mark="Chevrolet" class="">Niva, I Рестайлинг</option>
<option value="Citroen||C5, II" data-mark="Citroen" class="">C5, II &nbsp;(1)</option>
<option value="Ford||EcoSport, I" data-mark="Ford" class="">EcoSport, I</option>
<option value="Ford||Fiesta, Mk5" data-mark="Ford" class="">Fiesta, Mk5</option>
<option value="Great Wall||Hover H5, Hover H5" data-mark="Great Wall" class="">Hover H5, Hover H5</option>
<option value="Honda||CR-V, III Рестайлинг" data-mark="Honda" class="">CR-V, III Рестайлинг </option>
<option value="Hyundai||Creta, I" data-mark="Hyundai" class="">Creta, I &nbsp;(2)</option>
<option value="Hyundai||Elantra, III (XD2) Рестайлинг" data-mark="Hyundai" class="">Elantra, III (XD2) Рестайлинг </option>
<option value="Hyundai||Grandeur, V" data-mark="Hyundai" class="">Grandeur, V </option>
<option value="Hyundai||ix35, I Рестайлинг" data-mark="Hyundai" class="">ix35, I Рестайлинг </option>
<option value="Hyundai||Santa Fe, III Рестайлинг" data-mark="Hyundai" class="">Santa Fe, III Рестайлинг</option>
</select>


var select_map = {};
    $('select[name=auto_model] option').each(function () {
        if (select_map[$(this).attr('data-mark')]) {
        }else if($(this).attr('data-mark')!=='not'){
            $(this).before('<optgroup label="'+$(this).attr('data-mark')+'">');
        }
        select_map[$(this).attr('data-mark')] = true;
    });
  • Вопрос задан
  • 142 просмотра
Решения вопроса 2
hzzzzl
@hzzzzl
за jquery не скажу, но

Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
const select = document.querySelector('[name="auto_model"]');

select.append(...Object.values([...select].reduce((acc, n) => {
  if (n.value) {
    const k = n.dataset.mark;
    acc[k] || ((acc[k] = document.createElement('optgroup')).label = k);
    acc[k].append(n);
  }
  return acc;
}, {})));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы