使用JQuery隐藏Select的选项

时间:2011-01-15 11:50:16

标签: jquery select hide parent-child option

好的,让我们从一个例子开始吧 请记住,这只是一个例子。

  

<select id = "selection1">
  <option value = "1" id = "1">Number 1</option>
  <option value = "2" id = "2">Number 2</option>
  <option value = "3" id = "3">Number 3</option>
  </select>

现在,从这里开始,我们有3个选项的下拉列表 我现在要做的是隐藏一个选项。

添加style = "display:none"帮助 该选项不会出现在下拉列表中,但是使用箭头键,您仍然可以选择它 从本质上讲,它完全符合代码所说的内容。它没有显示,它停在那里。

$("#1").hide()的JQuery函数不起作用。
另外,我不仅要隐藏选项,还要完全删除它。

这样做有可能吗?
我是否必须使用父/兄弟/子元素?如果是这样,我仍然不确定如何。

对此的任何帮助将不胜感激。谢谢。

另一个问题 - 它是相关的

好的,所以我发现JQuery中有一个.remove()。效果很好。
但是,如果我想把它带回来呢?

  

如果(条件)
  {
  $(这)一个.remove();
  }

我可以循环这个。不应该复杂 但我想要做的是:

班级最大容量:(此处输入字段)
选择房间:(在此处下拉)

我想要做的是使用.change().keyup等功能更新下拉列表。
我可以在输入内容后创建下拉列表。在更改或键盘时,相应地执行下拉列表 但我正在做的是:

  

$ roomarray = mysql_query(“SELECT *
  从
  (
  SELECT *,
  CASE
  当类型='教室'那么1
  当类型='计算机实验室'那么2
  当类型='演讲厅'那么3
  当类型='礼堂'那么4
  结束为ClassTypeValue
  从房间
  )t
  ORDER BY ClassTypeValue,maxppl,roomID“);

echo "<select id = \"room\">";

while ($rooms = mysql_fetch_array($roomarray))
    { ?>
    <option value=<?php echo $rooms['roomID']; ?> id=<?php echo $rooms['roomID']; ?>><?php echo $rooms['type']; echo "&nbsp;"; echo $rooms['roomID']; echo "&nbsp;("; echo $rooms['maxppl']; echo ")"; ?></option>
    <?php
    }

echo "</select>";

是的,我知道它非常混乱 我打算稍后改变它。

但现在的问题是:我可以根据输入的内容切换选项的删除吗? 是否可以通过循环下拉来完成此操作?因为我确定无法继续执行SQL查询。或者甚至是一种选择?因为如果可能,我仍然认为这是一个糟糕的。

6 个答案:

答案 0 :(得分:7)

hide()不适用于Chrome ...我一直在尝试解决方案并将其包装在一个名为“ExtraBox”的插件中。我们的想法是临时存储选项,以便我们可以通过操作DOM来启用/禁用它们。我已经创建了这个插件,以便于使用。

我已经在jsFiddle上发布了代码,因此您可以亲自尝试:http://jsfiddle.net/KeesCBakker/HaFRC/。 [注意:在jsFiddle中的第一个项目,我很喜欢它!]

Html示例:

Select:
<br/>
<select id="TestKees">
    <option value="1" class="s1">First value</option>
    <option value="2" class="s2">Second value</option>
    <option value="3" class="s3">Third value</option>
</select>
<br/>
Enable / Disable
<br/>
<input id="txt" type="text" value="s2" />
<button id="btnEnable">Enable</button>

我已将以下jQuery添加到我的document.ready函数:

$('#TestKees').extraBox({ attribute: 'class' });

$('#btnEnable').click(function(){
    $('#TestKees').data('extraBox').enable(
        $('#txt').val()
    );
});

$('#btnDisable').click(function(){
    $('#TestKees').data('extraBox').disable(
        $('#txt').val()
    );  
});

该插件如下所示:

(function($) {

    // Create ExtraBox object
    function ExtraBox(el, options) {

        // Default options for the plugin (configurable)
        this.defaults = {
            attribute: 'class'
        };
        // Combine default and options objects
        this.opts = $.extend({}, this.defaults, options);

        // Non-configurable variables
        this.$el = $(el);
        this.items = new Array();
    };

    // Separate functionality from object creation
    ExtraBox.prototype = {

        init: function() {
            var _this = this;
            $('option', this.$el).each(function(i, obj) {
                var $el = $(obj);
                $el.data('status', 'enabled');
                _this.items.push({
                    attribute: $el.attr(_this.opts.attribute),
                    $el: $el
                });
            });
        },
        disable: function(key){
            $.each(this.items, function(i, item){
                if(item.attribute == key){
                     item.$el.remove();
                     item.$el.data('status', 'disabled'); 
                } 
            });
        },
        enable: function(key){
            var _this = this;
            $.each(this.items, function(i, item){
                if(item.attribute == key){

                    var t = i + 1; 
                    while(true)
                    {
                        if(t < _this.items.length) {   
                            if(_this.items[t].$el.data('status') == 'enabled')  {
                                _this.items[t].$el.before(item.$el);
                                item.$el.data('status', 'enabled');
                                break;
                            }
                            else {
                               t++;
                            }   
                        }
                        else {                                                                               _this.$el.append(item.$el);
                            item.$el.data('status', 'enabled');
                            break;
                        }                   
                    }
                } 
            });     
        }
    };

    // The actual plugin - make sure to test
    // that the element actually exists.
    $.fn.extraBox = function(options) {

        if (this.length) {
            this.each(function() {
                var rev = new ExtraBox(this, options);
                rev.init();
                $(this).data('extraBox', rev);
            });
        }
    };
})(jQuery);

答案 1 :(得分:3)

如果您只想删除元素,为什么要搞乱显示设置呢?

$('#1').remove();

它消失了。

答案 2 :(得分:1)

  

据我所知,这是不可能的   本身。你可以disable一个   <option>节点。完全   隐藏/删除你需要写的东西   一些自定义代码。

$('option').attr('disable', true);
     

顺便说一句,你不应该使用单一的   number作为元素的ID。使用   一些前缀,即option_1

实际上可以隐藏<option>节点,但不能跨浏览器兼容。

答案 3 :(得分:1)

我想,你的选择器是错误的。尝试这样的事情(更新):

<html>
    <head>
        <title>MooExample</title>
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                $("#click").click(function() {
                    $("#selection1 #1").remove();
                    //$("#selection1 > #1").toggle(); // Hide OR show
                });
            });
        </script>
    </head>

    <body>
        <select id="selection1">
            <option value="1" id="1">Number 1</option>
            <option value="2" id="2">Number 2</option>
            <option value="3" id="3">Number 3</option>
        </select>
        <input type="button" id="click" onclick="moo()" value="click" />
    </body>
</html>

请参阅parent-child selector(父级&gt;子级)。

答案 4 :(得分:1)

我已经提供了一个jQuery插件,可以非常好地解决这个问题。有了它,你会这样做:

$('#selection1').hideOption('1');
$('#selection1').showOption('1');

您可以根据需要隐藏和显示它们,并保持原始顺序。它适用于所有浏览器。您可以在此示例中看到:jsFiddle - Toggle Dropdown Options

您可以获得Toggle Dropdown Options plug-in。如果您不喜欢插件,只需将JavaScript代码复制到您自己项目的JavaScript文件中即可。有关详细信息,请参阅插件上的Read the Docs链接!

答案 5 :(得分:1)

这在Jquery中非常简单

//For Hide
$('#selection1 option[value=1]').hide();

//For Show
$('#selection1 option[value=1]').show();