以下内容:
$("select option:contains(fish)").attr('selected', true);
在jQuery 1.9以下的任何东西中运行得非常好,但在jQuery 1.9+中根本不起作用。我一直在搜索有关任何变化的任何文档,但没有找到任何内容。
知道如何让这段代码与新的jquery一起使用吗?
示例此处(默认为jQuery 1.4):http://jsfiddle.net/reigel/TZmEw/
答案 0 :(得分:17)
使用Prop api代替attr for jquery 1.9。
$("select option:contains(fish)").prop('selected', 'selected');
OR
$("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()方法。
答案 1 :(得分:1)
$("select option:contains(fish)").attr('selected', 'selected');
答案 2 :(得分:1)
请具体参阅1.9 the jQuery documentation on the topic。 .attr
与.prop
之间的混淆可能令人困惑,因为我知道没有具体方法可以了解“属性”是什么。对于所有意图和目的,当更改用户可以更改的值时...尤其是布尔值,您应该使用.prop
一个例外是输入值 - 您应该使用.val
。同样,使用.val
设置<select>
元素值可能更好 - 在您的情况下不容易做,但它会更准确。
jQuery 1.6引入了.prop()方法来设置或获取节点上的属性,并且不推荐使用.attr()来设置属性。但是,高达1.9的版本继续支持在特定情况下使用.attr()。
答案 3 :(得分:1)
试试这个
$("select option").removeAttr('selected').filter(":contains(fish)").attr('selected', true);
答案 4 :(得分:0)
自jQuery 1.6
以来,您应该使用prop
:
$("select option:contains(fish)").prop('selected', true);
在jQuery 1.6.1
中,他们将此功能重新引入attr
方法,以实现向后兼容性(人们抱怨)。在1.9
they removed it again中,由于此功能已被弃用了足够长的时间。