我想检测选择选项是否在"国际"optgroup下。现在我的方法是从所选项目中检测最接近的 optgroup,并获取其 label 属性的内容。我可以测试该字符串中的"国际"一词。其他方法更受欢迎。
如您所见,从此标记中,不幸的是,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');`
编辑
有人向我指出,以下选项组的嵌套也是可能的
<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');
}
});
});
http://jsbin.com/ibIJezO/1/
if ($('#venue option:selected').prevAll('optgroup').first().is('[label*="International"]'))
...
}
.prevAll('optgroup')
得到前面的所有optgroup
。 .first
将其限制为第一个,这是最接近的前optgroup
。然后.is()
告诉您其标签是否符合您的条件。
捷轩