今これは単なる別のものではありません違いの質問は何ですか、私は持っています いくつかのテストを行いました(http://jsfiddle.net/ZC3Lf/)prop
およびattr
of <form action="/test/"></form>
の出力は次のとおりです。
1)prop修正テスト
プロップ:http://fiddle.jshell.net/test/1
属性:http://fiddle.jshell.net/test/1
2)属性変更テスト
プロップ:http://fiddle.jshell.net/test/1
属性:/test/1
3)Attr then Prop Modification test
プロップ:http://fiddle.jshell.net/test/11
属性:http://fiddle.jshell.net/test/11
4)Prop then Attr Modification test
プロップ:http://fiddle.jshell.net/test/11
属性:http://fiddle.jshell.net/test/11
私の知る限り、いくつかのことについて混乱しています。
Prop:JavaScriptによる変更後の現在の状態の値
Attr:ページの読み込み時にhtmlで定義された値。
これが正しい場合、
prop
を変更するとaction
が完全に修飾されるように見え、逆に属性を変更しないのですか?1)
のprop
を変更すると属性が変更されるのはなぜですか?2)
のattr
を変更すると、プロパティが変更されるのはなぜですか?そのようにリンクされるのですか?[〜#〜] html [〜#〜]
JavaScript
var element = $('form');
var property = 'action';
/*You should not need to modify below this line */
var body = $('body');
var original = element.attr(property);
body.append('<h1>Prop Modification test</h1>');
element.prop(property, element.prop(property) + 1);
body.append('Prop: '+element.prop(property)+'<br />');
body.append('Attr: '+element.attr(property)+'<hr />');
//reset
element.prop(property, original);
element.attr(property, original);
body.append('<h1>Attr Modification test</h1>');
element.attr(property, element.attr(property) + 1);
body.append('Prop: '+element.prop(property)+'<br />');
body.append('Attr: '+element.attr(property)+'<hr />');
//reset
element.prop(property, original);
element.attr(property, original);
body.append('<h1>Attr then Prop Modification test</h1>');
element.attr(property, element.attr(property) + 1);
element.prop(property, element.prop(property) + 1);
body.append('Prop: '+element.prop(property)+'<br />');
body.append('Attr: '+element.attr(property)+'<hr />');
//reset
element.prop(property, original);
element.attr(property, original);
body.append('<h1>Prop then Attr Modification test</h1>');
element.prop(property, element.prop(property) + 1);
element.attr(property, element.attr(property) + 1);
body.append('Prop: '+element.prop(property)+'<br />');
body.append('Attr: '+element.attr(property)+'<hr />');
残念ながら、リンクは機能しません:(
ただし、attr
はすべての属性用です。 prop
はプロパティ用です。
古いjQueryバージョン(<1.6)では、attr
がありました。 nodeName
、selectedIndex
、またはdefaultValue
などのDOMプロパティを取得するには、次のようなことをしなければなりませんでした。
var elem = $("#foo")[0];
if ( elem ) {
index = elem.selectedIndex;
}
それは残念だったので、prop
が追加されました:
index = $("#foo").prop("selectedIndex");
これは素晴らしかったが、次のように迷惑なことに後方互換性がなかった。
<input type="checkbox" checked>
checked
の属性はありませんが、checked
というプロパティがあります。
1.6の最終ビルドでは、attr
もprop
を実行するため、問題は発生しません。これをきれいな休憩にしたい人もいましたが、あちこちで物事が壊れなかったので、正しい決定が下されたと思います!
に関して:
プロップ:JavaScriptによる変更後の現在の状態の値
属性:ページの読み込み時にhtmlで定義された値。
多くの場合、属性が実際に変更されるため、これは常に当てはまるわけではありませんが、checkedなどのプロパティには変更する属性がないため、propを使用する必要があります。
参照:
.propと.attrの違いを確認する明確なケースがあります
以下のHTMLを検討してください。
<form name="form" action="#">
<input type="text" name="action" value="myvalue" />
<input type="submit" />
</form>
<pre id="return">
</pre>
およびjQueryを使用した以下のJS:
$(document).ready(function(){
$("#return").append("$('form').prop('action') : " + $('form').prop('action') + '\r\n');
$("#return").append("$('form').attr('action') : " + $('form').attr('action') + '\r\n');
$("#return").append("document.form.action : " + document.form.action);
});
次の出力を作成します。
$('form').prop('action') : [object HTMLInputElement]
$('form').attr('action') : #
document.form.action : [object HTMLInputElement]
jquery 1.6.1+ attr()は1.6以前のようにプロパティを返す/変更するため。したがって、テストはあまり意味がありません。
戻り値の小さな変更に注意してください。
例えば.
attr( ‘checked’):1.6.1以降、true/falseが1.6になる前。 「checked」/ undefinedが返されます。
attr( ‘selected’):1.6の前にtrue/falseが返されます。1.6.1“ selected”/undefinedが返されるためです
ドイツ語でのこのトピックの詳細な概要は次の場所にあります。
私はこれを試しました
console.log(element.prop(property));
console.log(element.attr(property));
以下のように出力します
http://fiddle.jshell.net/test/
/test/
これは、action
がreadであるときにのみprop
が正規化されることを示している可能性があります。