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 では attr の代わりに Prop api を使用します。

$("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

特に 1.9 に関する トピックについては、jQuery のドキュメントを参照してください。「プロパティ」が何であるかを知る特定の方法がないことを私は知っているので、.attr対は混乱する可能性があります。.propすべての意図と目的のために、ユーザーが変更できる値を変更するとき..特にブール値を使用する必要があります.prop

1 つの例外は、入力の値です.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 に答える
1
$("select option:contains(fish)").attr('selected', 'selected');
于 2013-01-16T19:30:45.513 に答える
0

jQuery 以来1.6、次を使用する必要がありますprop

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

jQueryでは、下位互換性のため1.6.1に、この機能をメソッドに再導入しました(人々は不満を漏らしていました)。attrこの機能は十分に長い間廃止されてきたため、1.9 再び削除されました。

于 2013-01-16T19:29:59.027 に答える