JQuery получить родительскую группу

0

Я хотел бы определить, находится ли опция выбора под "международной" optgroup. Прямо сейчас мой подход заключается в обнаружении ближайшей optgroup из выбранного элемента и получении содержимого его атрибута метки. Я мог бы проверить эту строку для слова "международный". Другие подходы более приветствуются.

Как вы можете сказать, из этой разметки его несчастливо, что optgroup не переносит дочерние параметры:

<select id="venue">
    <optgroup label="New England"></optgroup>
        <option value="1">&nbsp;NH</option>
        <option value="2">&nbsp;ME</option>
        <option value="3">&nbsp;VT</option>
        <option value="4">&nbsp;MA</option>   
        <option value="4">&nbsp;CT</option>   
        <option value="4">&nbsp;RI</option>   
    <optgroup label="International"></optgroup>
        <option value="100">Canada</option>
        <option value="100">Texas</option>
        <option value="100">Mexico</option>
</select>

JQuery, с которым я работал, очевидно, не работает, но вы можете видеть, к чему я пытаюсь добраться:

dropdownval = jQuery('select#venue option:selected')
    .parentsUntil( jQuery('optgroup'), '[label*="international"]')
        .attr('label');'

РЕДАКТИРОВАТЬ

Его указывали на то, что возможно также следующее гнездование групп optgroups

<select id="venue">
    <optgroup label="New England"></optgroup>
        <option value="1">&nbsp;NH</option>
        <option value="2">&nbsp;ME</option>
        <option value="3">&nbsp;VT</option>
        <option value="4">&nbsp;MA</option>   
        <option value="4">&nbsp;CT</option>   
        <option value="4">&nbsp;RI</option>   
    <optgroup label="International"></optgroup>
        <option value="100">&nbsp;Canada</option>
        <option value="100">&nbsp;Texas</option>
        <option value="100">&nbsp;Mexico</option>
    <optgroup label="&nbsp;Europe"></optgroup>
        <option value="100">&nbsp;&nbsp;Bruges</option>
</select>
  • 0
    .prevUntil - это то, что вам нужно, а не .parentsUntil , так как optgroup не является родителем.
  • 0
    хороший крик, но dropdownval прежнему возвращается как undefined
Показать ещё 3 комментария
Теги:
select
optgroup

2 ответа

1
Лучший ответ

Если ваш список надежно заказан (как представлено), то вы можете пропустить привязку отношений, то есть first() и т.д., И следовать за .prevAll('optgroup') всем пути вверх. Но если порядок вашего option может измениться, попробуйте .nextAll('optgroup') или следуйте логике @Barmar, чтобы пройти в нужном направлении:

$("#venue").change(function() {
    $("#venue option:selected").each(function() {
        if ($(this).prevAll('optgroup').attr('label') == 'International') {
            alert('detected');
        }
    });
});

http://jsbin.com/ibIJezO/1/

  • 0
    да, jsfiddle не работает, я пошел в jsbin
  • 0
    Ваш ответ сработал на моем тестовом примере, однако я обнаружил, что дальнейшее вложение в подкатегории действительно возможно. Я бы воспринял ваш ответ как правильный, поскольку он решил мою ОП, но если у вас возникнут какие-либо мысли об этих различных условиях, я буду признателен им.
Показать ещё 1 комментарий
1
if ($('#venue option:selected').prevAll('optgroup').first().is('[label*="International"]'))
    ...
}

.prevAll('optgroup') получает все предыдущие optgroup s. .first он ограничивает его первым, что является ближайшей предшествующей optgroup. Затем .is() сообщает вам, соответствует ли его метка вашим критериям.

JSBIN

  • 0
    Спасибо за вашу помощь, я не знал, что .is() может преобразовать запрос в боллиан - это будет очень полезно - еще раз спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню