Okay, let\'s start with an example.
Keep in mind, this is only an example.
 
As far as I know, this is not possible natively. You can
disable
an<option>
node tho. To completlely hide/remove it you would need to write some custom code.$('option').attr('disable', true);
By the way, you shouldn't use a single number as an ID for an element. Use somekind of prefix, i.e.
option_1
.
it actually is possible to hide an <option>
node, but not cross-browser compatible.
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);
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!
//For Hide
$('#selection1 option[value=1]').hide();
//For Show
$('#selection1 option[value=1]').show();
Why are you messing around with display settings if you just want to remove the element?
$('#1').remove();
and its gone.
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).