0

我想检测选择选项是否在“国际”选项组下。现在我的方法是从所选项目中检测最近的 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');`

编辑

有人向我指出,以下嵌套的 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">&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>
4

2 回答 2

1
if ($('#venue option:selected').prevAll('optgroup').first().is('[label*="International"]'))
    ...
}

.prevAll('optgroup')获取所有前面optgroup的 s。.first将其限制为第一个,这是最接近的前面的optgroup. 然后.is()告诉您其标签是否符合您的条件。

JSBIN

于 2013-10-25T19:20:14.787 回答
1

如果您的列表是可靠排序的(如所示),那么您可以跳过捕获关系,即first(),等,并.prevAll('optgroup')一直跟进。但是,如果您option的 s 的顺序可能会改变,请尝试.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/

于 2013-10-25T19:28:51.933 回答