使用JQuery隐藏Select的选项

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


Number 1
Number 2
Number 3

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

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

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

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

任何有关这方面的帮助将不胜感激。 谢谢。

另一个问题 – 它是相关的

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

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

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

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

我想要它做的是使用.change().keyup等函数更新Dropdown。
我只能在输入内容后创建下拉列表。 在更改或键盘上,相应地执行下拉列表。
但我正在做的是这样的:

$ roomarray = mysql_query(“SELECT *


选择 *,
案件
WHEN type =’Classroom’那么1
当类型=’计算机实验室’那么2
当类型=’演讲厅’那么3
当类型=’礼堂’那么4
END作为ClassTypeValue
从房间
)t
ORDER BY ClassTypeValue,maxppl,roomID“);

 echo ""; while ($rooms = mysql_fetch_array($roomarray)) { ?> <option value= id=> <?php } echo ""; 

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

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

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

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

Html示例:

 Select: 

Enable / Disable

我已经将以下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').remove(); 

它消失了。

据我所知,这本身是不可能的。 您可以disable 节点。 要完全隐藏/删除它,您需要编写一些自定义代码。

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

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

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

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

   MooExample         

请参阅父子选择器 (parent> child)。

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

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

您可以根据需要隐藏和显示它们,并保持原始顺序。 它适用于所有浏览器。 您可以在此示例中看到: jsFiddle – 切换下拉选项

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

这在Jquery中非常简单

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