6

以下:

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

在 jQuery 1.9 以下的任何东西中都可以很好地工作,但在 jQuery 1.9+ 中根本不起作用。我一直在搜索有关任何更改的任何文档,但没有找到任何东西。

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

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

4

5 回答 5

17

在 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

于 2013-01-16T19:32:36.823 回答
1
$("select option:contains(fish)").attr('selected', 'selected');
于 2013-01-16T19:30:45.513 回答
1

请参阅关于 1.9 的主题的 jQuery 文档。.attrvs..prop可能会令人困惑,因为我知道没有特定的方法可以知道“属性”是什么。出于所有意图和目的,在更改用户有能力更改的值时..尤其是布尔值,您应该使用.prop

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

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

于 2013-01-16T19:34:02.810 回答
1

试试这个

$("select option").removeAttr('selected').filter(":contains(fish)").attr('selected', true);
于 2013-01-16T19:41:40.003 回答
0

由于 jQuery 1.6,您应该使用prop

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

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

于 2013-01-16T19:29:59.027 回答