隐藏选择的optgroups及其内容,但选择的除外

时间:2012-08-28 20:30:45

标签: javascript jquery html html5 javascript-events

我想为国家/地区创建一个选择标记,当我们选择国家/地区时,它隐藏所有选项组及其选择标记的内容,除了optgroup及其内容与选定的国家/地区选项具有相同的标签,示例< / p>

<select name="country">
<option value="United States">United States</option>     <!-- if I select US -->
<option value="Canada">Canada</option>
<option value="Mexico">Mexico</option>
</select>

<select name="country">
<optgroup label="United States">
<option value="California">California</option>           <!-- Only these states -->
<option value="New York">New York</option>               <!-- are displayed -->
</optgroup>
<optgroup label="Canada">                                <!-- hidden-->
<option value="Ontario">Ontario</option>                 <!-- hidden-->
<option value="Quebec">Quebec</option>                   <!-- hidden-->
</optgroup>
<optgroup label="Mexico">                                <!-- hidden-->
<option value="Baja California">Baja California</option> <!-- hidden-->
<option value="Mexico Estado">Mexico Estado</option>     <!-- hidden-->
</optgroup>
</select>

感谢您的帮助

3 个答案:

答案 0 :(得分:4)

这似乎对我有用:

​$("select[name='country']:eq(0)"​).on("change", function() {
    $("select[name='country']:eq(1)")
        .find("optgroup,option")
        .hide()
        .filter("[label='" + this.value + "'],[label='" + this.value + "'] > *")
        .show();
});​​​​​​​​

DEMO: http://jsfiddle.net/MVkXg/

答案 1 :(得分:1)

我认为你不能以跨浏览器的方式做到这一点。我想说最好的选择是存储所有选项并重新创建带有过滤选项的选择

答案 2 :(得分:0)

从HTML 5开始,我们有hidden属性。我最近不得不做类似的事情,尽管有了React,所以我会把确切的管道留给你,但你可以将你的optgroup设置为hidden一个

<select name="country">
  <optgroup label="United States">
    <option value="California">California</option>           <!-- Only these states -->
    <option value="New York">New York</option>               <!-- are displayed -->
  </optgroup>
  <optgroup label="Canada" hidden>                                <!-- hidden-->
    <option value="Ontario">Ontario</option>                 <!-- hidden-->
    <option value="Quebec">Quebec</option>                   <!-- hidden-->
  </optgroup>
</select>