jQuery get parent optgroup



我想检测选择选项是否在"国际"optgroup下。现在我的方法是从所选项目中检测最接近的 optgroup,并获取其 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">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">&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>

如果你的列表是可靠的排序(如所示),那么你可以跳过捕捉关系,即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()告诉您其标签是否符合您的条件。

捷轩

最新更新