jquery删除“select”属性的选项?

为什么在IE8中不能取消select多行select框中的所有选项?

$("#myselect").children().removeAttr("selected"); 

有没有解决方法? 没有什么我能想到的(attr(“selected”,“”)等)似乎工作。

更新: 这是一个更新的jsFiddle。 我已经至less让它降级,所以在IE8中,第一个选项被选中。 但是,如果没有硬编码selected ='selected' IE8似乎需要的.attr调用,它会在Firefox,Chrome和IE8中做3个不同的事情! 看到这个版本: ,这是简单的,似乎应该工作:

  • 在Firefox中:没有select
  • 在Chrome中:select第0个选项
  • 在IE8中:select第一个选项

也许我已经让自己变得疯狂了,那里有什么地方我看不到?

这是jQuery转换为IE8的方式,不一定是浏览器本身。

我可以通过去旧学校和jQuery的一条线:

 document.getElementById('myselect').selectedIndex = -1; 

这个问题是以误导的方式提出的。 “删除selected属性”和“取消所有选项”是完全不同的事情

要以文档化的,跨浏览器的方式取消select所有选项,请使用

 $("select").val([]); 

要么

 // Note the use of .prop instead of .attr $("select option").prop("selected", false); 

这工作:

 $("#myselect").find('option').removeAttr("selected"); 

要么

 $("#myselect").find('option:selected').removeAttr("selected"); 

的jsfiddle

使用jQuery 1.9及以上版本:

 $("#mySelect :selected").prop('selected', false); 

类似@ radiak的回应,但与jQuery(请参阅此API文档和如何更改selectedIndex评论)。

$('#mySelectParent').find("select").prop("selectedIndex",-1);

这种方法的好处是:

  • 你可以留在jQuery中
  • 您可以使用jQueryselect器(例如#mySelectParent )限制范围
  • 更明确定义的代码
  • 适用于IE8,Chrome,FF

另一种select:

 $('option:selected', $('#mySelectParent')).removeAttr("selected"); 

希望能帮助到你

那么,我在这个问题上花了很多时间。 为了得到一个与Chrome和IE工作的答案,我不得不改变我的方法。 这个想法是为了避免删除选定的选项(因为不能用IE正确删除它)。 =>这意味着select选项不是通过在选项上添加或设置所选属性,而是使用selectedIndex属性在“select”级别select一个选项。

之前:

 $('#myselect option:contains("value")').attr('selected','selected'); $('#myselect option:contains("value")').removeAttr('selected'); => KO with IE 

之后:

 $('#myselect').prop('selectedIndex', $('#myselect option:contains("value")').index()); $('#myselect').prop('selectedIndex','-1'); => OK with all browsers 

希望它会有所帮助