Я хотел бы определить, находится ли опция выбора под "международной" optgroup. Прямо сейчас мой подход заключается в обнаружении ближайшей optgroup из выбранного элемента и получении содержимого его атрибута метки. Я мог бы проверить эту строку для слова "международный". Другие подходы более приветствуются.
Как вы можете сказать, из этой разметки его несчастливо, что optgroup не переносит дочерние параметры:
<select id="venue">
<optgroup label="New England"></optgroup>
<option value="1"> NH</option>
<option value="2"> ME</option>
<option value="3"> VT</option>
<option value="4"> MA</option>
<option value="4"> CT</option>
<option value="4"> 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"> NH</option>
<option value="2"> ME</option>
<option value="3"> VT</option>
<option value="4"> MA</option>
<option value="4"> CT</option>
<option value="4"> RI</option>
<optgroup label="International"></optgroup>
<option value="100"> Canada</option>
<option value="100"> Texas</option>
<option value="100"> Mexico</option>
<optgroup label=" Europe"></optgroup>
<option value="100"> Bruges</option>
</select>
Если ваш список надежно заказан (как представлено), то вы можете пропустить привязку отношений, то есть first()
и т.д., И следовать за .prevAll('optgroup')
всем пути вверх. Но если порядок вашего option
может измениться, попробуйте .nextAll('optgroup')
или следуйте логике @Barmar, чтобы пройти в нужном направлении:
$("#venue").change(function() {
$("#venue option:selected").each(function() {
if ($(this).prevAll('optgroup').attr('label') == 'International') {
alert('detected');
}
});
});
if ($('#venue option:selected').prevAll('optgroup').first().is('[label*="International"]'))
...
}
.prevAll('optgroup')
получает все предыдущие optgroup
s. .first
он ограничивает его первым, что является ближайшей предшествующей optgroup
. Затем .is()
сообщает вам, соответствует ли его метка вашим критериям.
.is()
может преобразовать запрос в боллиан - это будет очень полезно - еще раз спасибо.
.prevUntil
- это то, что вам нужно, а не.parentsUntil
, так как optgroup не является родителем.dropdownval
прежнему возвращается какundefined