以下:
$("select option:contains(fish)").attr('selected', true);
在 jQuery 1.9 以下的任何东西中都可以很好地工作,但在 jQuery 1.9+ 中根本不起作用。我一直在搜索有关任何更改的任何文档,但没有找到任何东西。
知道如何让这段代码与新的 jquery 一起工作吗?
此处示例(默认为 jQuery 1.4):http: //jsfiddle.net/reigel/TZmEw/
以下:
$("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() 方法。
$("select option:contains(fish)").attr('selected', 'selected');
请参阅关于 1.9 的主题的 jQuery 文档。.attr
vs..prop
可能会令人困惑,因为我知道没有特定的方法可以知道“属性”是什么。出于所有意图和目的,在更改用户有能力更改的值时..尤其是布尔值,您应该使用.prop
一个例外是输入的值——你应该使用.val
它。.val
同样,使用设置元素值可能更好<select>
- 在您的情况下不容易做到,但它会更准确。
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);
在 jQuery1.6.1
中,他们将此功能重新引入该attr
方法,以实现向后兼容性(人们抱怨)。1.9
他们再次将其删除,因为此功能已被弃用足够长的时间。