Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove and restore options from select

I have html:

<select id="sel">
    <option value="1">aaa</option>
    <option value="2">bbb</option>
    <option value="3">ccc</option>
    <option value="4">ddd</option>
    <option value="5">eee</option>
    <option value="6">fff</option>
    <option value="7">ggg</option>
</select>

<button id="remove">remove</button>
<button id="restore">restore</button>

and javascript:

function rand(){
return Math.floor(Math.random() * 7) + 1;
}

function deleteRandom(){

$.each([rand(), rand(), rand()], function( index, value ) {
  $("#sel option[value=" + value + "]").remove();
    //here should be saved...
});

}

function restore(){
 //this function should restore #sel
}

$("#remove").click(function(){
   deleteRandom();
})

$("#restore").click(function(){
   restore();
})

LIVE DEMO: http://jsfiddle.net/g4Q8B/

How is the best method for save remove option from select? I dont want use hide, display:none etc, because this not working in all browsers. I dont want also use disabled.

I want remove this, and next or previous save all options from select. Maybe i should save all select#sel, but how?

like image 549
user3047222 Avatar asked Nov 28 '13 20:11

user3047222


1 Answers

Best approach is store a clone of the options on page load. Then clone that clone to restore, so you always keep the first clone as the cache.

var $options=$('#sel option').clone();

function restore(){
 $('#sel').html( $options.clone()) 
}

DEMO

Now if you want to do any filtering of options, can do it on the cache also, you always have the full set stored

$('#filtered').click(function(){
    /* only options with value > 3*/
    var opts=$options.clone().filter(function(){
       return this.value > 3; 
    })
    $('#sel').html(opts)    
})
like image 76
charlietfl Avatar answered Oct 04 '22 11:10

charlietfl