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
希望它会有所帮助