为什么隐藏“选择”选项?

时间:2011-10-03 15:40:12

标签: jquery html jquery-selectors

我有这样的HTML选择:

<select name="something">
    <option value="a">1</option>
    <option value="b">2</option>
    <option value="c">3</option>
</select>

我注意到jquery解释了选项是隐藏的HTML标记。当我必须删除像这个例子中的真正隐藏标签时,问题出现了:

<form action="#" id="f">
    <select name="something">
        <option value="a">1</option>
        <option value="b">2</option>
        <option value="c">3</option>
    </select>
    <p style="display:none">hello world</p>
    <any_tag style="display:none">some text</any_tag>
</form>

如果我执行此操作:

$("#f :hidden").remove();

删除所有选项。问题是为什么jquery删除选项?什么是最适合删除 隐藏代码的选择器? (选择标签是否好)

这是a test

5 个答案:

答案 0 :(得分:11)

您可以添加应该存在的功能:P

$("#f :hidden:not(option)").remove();

答案 1 :(得分:8)

查看此jQuery错误报告:http://bugs.jquery.com/ticket/6293

特别值得注意的是:

  

3个月前由john
改变了   状态从打开变为关闭   分辨率设置为wontfix

     

考虑到每个浏览器,但Firefox   说这是隐藏的 - 似乎是另一种方式。那   如果说,我不确定你想要实现的目标   :hidden /:在选项元素上可见。你好像应该这样   使用:改为选择。不要以为这是我们的事   会花很多时间。

作为这种情况的解决方案,我会选择@Joseph已经提供的内容:

$("#f :hidden:not(option)").remove();

..按预期工作:http://jsfiddle.net/thirtydot/G4Qnr/4/

答案 2 :(得分:2)

尝试:

$(":hidden").not("option")

答案 3 :(得分:0)

在这种情况下,您可以简单地将隐藏元素包装在某种容器中,并使用jQuery从容器中删除元素:

<div id="foo">
    <p style="display:none;">hello world</p>   
</div>

然后,在jQuery中你可以这样做:

$("#foo :hidden").remove();

修改

这是另一种方法:

$("#f :hidden").not("option").remove();

答案 4 :(得分:0)

不确定原因,但您可以使用:not jQuery selector来补救。

$("#f :not(option):hidden").remove();

http://jsfiddle.net/G4Qnr/2/