Hiding Options of a Select with JQuery

前端 未结 6 1314
迷失自我
迷失自我 2020-12-11 17:58

Okay, let\'s start with an example.
Keep in mind, this is only an example.

提交评论

  • 2020-12-11 18:15

    The hide() doesn't work for Chrome... I've been experimenting with a work-around and wrapped it in a plugin I called "ExtraBox". The idea is to store the options temporary so we can enable / disable them by manipulating the DOM. I've created the plugin to make it easier to use.

    I've posted the code on jsFiddle, so you can try it for yourself: http://jsfiddle.net/KeesCBakker/HaFRC/. [note: first project in jsFiddle, I'm loving it!]

    Html example:

    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>
    

    I've added the following jQuery to my document.ready function:

    $('#TestKees').extraBox({ attribute: 'class' });
    
    $('#btnEnable').click(function(){
        $('#TestKees').data('extraBox').enable(
            $('#txt').val()
        );
    });
    
    $('#btnDisable').click(function(){
        $('#TestKees').data('extraBox').disable(
            $('#txt').val()
        );  
    });
    

    The plugin looks like this:

    (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);
    
    0 讨论(0)
  • 2020-12-11 18:18

    I've made available a jQuery Plugin that solves this very nicely. With it, you would do this:

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

    You can hide and show them as much as you want, and they will keep their original order. It works in all browsers. You can see that in this sample: jsFiddle - Toggle Dropdown Options

    You can get the Toggle Dropdown Options plug-in. If you don't like plug-ins, just copy the JavaScript code from it to your own project's JavaScript file. See the Read the Docs link on the plug-in for more information!

    0 讨论(0)
  • 2020-12-11 18:22

    This Is Very Simple In Jquery

    //For Hide
    $('#selection1 option[value=1]').hide();
    
    //For Show
    $('#selection1 option[value=1]').show();
    
    0 讨论(0)
  • 2020-12-11 18:23

    Why are you messing around with display settings if you just want to remove the element?

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

    and its gone.

    0 讨论(0)
  • 2020-12-11 18:23

    I suppose, your selector is wrong. Try something like this (updated):

    <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>
    

    See parent-child selector (parent > child).

    0 讨论(0)
  • 提交回复
    热议问题