如何在IE中使用JQuery隐藏和显示选择选项

如何在IE中使用JQuery隐藏和显示选择选项,jquery,internet-explorer,html-select,Jquery,Internet Explorer,Html Select,我正试图在下拉列表中隐藏一些选项。JQuery的.hide()和.show()在Firefox和Chrome中工作得很好,但在IE中就没有那么好了 有什么好主意吗?根据浏览器检测隐藏和显示选项 在许多可能的方法中,这种方法需要浏览器嗅探,这可能是不稳定的,但另一方面,使用这种方法,我们不必交换同一select列表的多个副本 //To hide elements $("select option").each(function(index, val){ if ($(this).is('op

我正试图在下拉列表中隐藏一些选项。JQuery的
.hide()
.show()
在Firefox和Chrome中工作得很好,但在IE中就没有那么好了


有什么好主意吗?

根据浏览器检测隐藏和显示选项

在许多可能的方法中,这种方法需要浏览器嗅探,这可能是不稳定的,但另一方面,使用这种方法,我们不必交换同一
select
列表的多个副本

//To hide elements
$("select option").each(function(index, val){
    if ($(this).is('option') && (!$(this).parent().is('span')))
        $(this).wrap((navigator.appName == 'Microsoft Internet Explorer') ? '<span>' : null).hide();
});

//To show elements
$("select option").each(function(index, val) {
    if(navigator.appName == 'Microsoft Internet Explorer') {
        if (this.nodeName.toUpperCase() === 'OPTION') {
            var span = $(this).parent();
            var opt = this;
            if($(this).parent().is('span')) {
                $(opt).show();
                $(span).replaceWith(opt);
            }
        }
    } else {
        $(this).show(); //all other browsers use standard .show()
    }
});
//隐藏元素的步骤
$(“选择选项”)。每个(函数(索引,val){
if($(this.is('option')&(!$(this.parent().is('span'))
$(this).wrap((navigator.appName==“Microsoft Internet Explorer”)?“”:null.hide();
});
//显示元素
$(“选择选项”)。每个(函数(索引,val){
如果(navigator.appName==“Microsoft Internet Explorer”){
if(this.nodeName.toUpperCase()=='OPTION'){
var span=$(this.parent();
var opt=这个;
if($(this).parent()是('span')){
$(opt.show();
$(span).替换为(opt);
}
}
}否则{
$(this.show();//所有其他浏览器都使用标准的.show()
}
});

这完全归功于Dima Svirid:

只需提及IE11 navigator.appName返回“Netscape”: 因此,考虑到这一点:

$("select option[value='your_option_value']").wrap((navigator.appName == 'Microsoft Internet Explorer' || navigator.appName == 'Netscape') ? '<span>' : null).hide();
$(“选择选项[value='your_option_value'])).wrap((navigator.appName=='Microsoft Internet Explorer'.| | | navigator.appName=='Netscape')?'':null.hide();

我找到了一个相当简单的解决方案,尽管这些选项不会被隐藏,而是在IE上被禁用

$('#delivery_time option[value="06:30"]').removeAttr('disabled').show();       // To Show/Enable
$('#delivery_time option[value="06:30"]').attr('disabled', 'disabled').hide(); // To Hide/Disable

以下是我偶然发现的这两行代码的来源:

我们可以看到一些代码吗?这是可行的,但最终一个更好、更干净的跨浏览器解决方案是使用脚本实时创建、添加和删除所选项目。极好的@tony:)工作得非常完美!这是令人难以置信的骇客,尽管不幸的是,对于一个需要大量重新编码才能实现任何其他方法的项目,这是我能找到的唯一解决方案。干杯。是的,它确实很黑。当我遇到这个愚蠢的IE bug时,它为我节省了很多重新编码的时间。这是一个很好的观点。但是,其他浏览器可以,因此您的里程可能会有所不同。