选项:选择不工作jquery 1.9

下列:

$("select option:contains(fish)").attr('selected', true); 

在jQuery 1.9以下的任何地方都可以使用,但在jQuery 1.9+中根本不起作用。 我一直在搜索有关任何变化的任何文档,但没有找到任何内容。

知道如何让这个代码与新的jquery一起工作吗?

示例此处(默认为jQuery 1.4): http : //jsfiddle.net/reigel/TZmEw/

对于jquery 1.9,使用Prop api而不是attr。

 $("select option:contains(fish)").prop('selected', 'selected'); 

要么

  $("select option:contains(fish)").prop('selected', true); 

原因:jQuery 1.6引入了.prop()方法来设置或获取节点上的属性,并且不推荐使用.attr()来设置属性。 但是,高达1.9的版本继续支持在特定情况下使用.attr()。 当使用区分属性和属性的选择器时,向后兼容性名称中的此行为会导致混淆。

资料来源: http : //jquery.com/upgrade-guide/1.9/#changes-of-note-in-jquery-1-9

在Attr Api中提到: 从jQuery 1.6开始,.attr()方法为尚未设置的属性返回undefined。 此外,.attr()不应用于普通对象,数组,窗口或文档。 要检索和更改DOM属性,请使用.prop()方法。

资料来源: http : //api.jquery.com/attr/#entry-longdesc

 $("select option:contains(fish)").attr('selected', 'selected'); 

有关 1.9 的主题 ,请参阅jQuery文档 。 .attr vs. .prop可能令人困惑,因为我知道没有具体方法可以知道“属性”是什么。 对于所有意图和目的,当更改用户能够更改的值时…尤其是布尔值,您应该使用.prop

一个例外是输入值 – 你应该使用.val 。 同样,使用.val设置元素值可能更好 – 在你的情况下不容易做,但它会更准确。

jQuery 1.6引入了.prop()方法来设置或获取节点上的属性,并且不推荐使用.attr()来设置属性。 但是,高达1.9的版本继续支持在特定情况下使用.attr()。

试试这个

 $("select option").removeAttr('selected').filter(":contains(fish)").attr('selected', true); 

从jQuery 1.6 ,你应该使用prop

 $("select option:contains(fish)").prop('selected', true); 

在jQuery 1.6.1 ,他们将此function重新引入到attr方法中,以实现向后兼容性(人们抱怨)。 在1.9 他们再次将其删除 ,因为此function已被弃用了足够长的时间。