【发布时间】:2017-02-07 22:34:16
【问题描述】:
我想检测选择选项是否在“国际”选项组下。现在我的方法是从所选项目中检测最近的 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');`
编辑
有人向我指出,以下 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>
<optgroup label=" Europe"></optgroup>
<option value="100"> Bruges</option>
</select>
【问题讨论】:
-
.prevUntil是您需要的,而不是.parentsUntil,因为 optgroup 不是父级。 -
好声音,但
dropdownval仍然返回undefined -
我没有意识到
prevUntil停止之前匹配的元素,不包括它。看我的回答。 -
如果你想像编辑一样嵌套,你真的需要将 optgroups 包裹在它们包含的内容周围。你怎么能说欧洲是一个子类别而不是一个主要类别?
-
这是一个非常好的观点,也是下拉标记生成方式的一个缺点。我想我可以开始计算出现开玩笑的
&nbsp;的数量