ホームページ >ウェブフロントエンド >jsチュートリアル >jQuery の attr と prop_jquery の使用の概要
属性とプロパティ
attribute と property はどちらも属性と訳せますが、違いを示すために、これら 2 つの単語は通常、属性と特性と訳されます。
上記の HTML ステートメントには、要素「div」、属性「id」、およびテキスト「click here」という 3 つのノードがあります。最も一般的な属性は、正式には属性タイプのノードを指します。処理には特別なメソッドがあります。 JavaScript の属性。 Function.getAttribute(name) / setAttribute(name,value)。もちろん、属性は HTML ドキュメント上に表示されるものだけではありません。属性をカスタマイズして DOM ノードに追加することもできます
コードをコピー
setAttribute メソッドを通じて設定された属性は、最終的に要素属性とプロパティは関係がないように思えますが、なぜですか? 。 。多くの属性ノードには対応するプロパティ属性もあるため、属性とプロパティは混同されやすいです。たとえば、上記の div の "id" 属性は t.id を使用して取得することもできます (実際、ほとんどの人はこの方法で取得します)。プロパティを通じて ID を変更すると、getAttibute で取得した ID が更新された ID になります。
コードをコピー
コードをコピー
1. 組み込み属性については、属性が変更されると、プロパティが変更され、その逆も同様です。ただし、名前が異なっていても、属性とプロパティは独立したデータになります。以下の図のようになりますが、IE6 と 7 の間に区別はなく、カスタム属性データ
は引き続き共有されます。
を使用する場合、今使用した属性のクラス属性は次のようになります。
コードをコピー
3. inputなどのchecked属性と同様に値がtrue/falseのプロパティは、属性で取得した値がHTML文書のリテラル値となり、プロパティは計算結果を取得します。プロパティのリテラル値は属性のリテラル値には影響しませんが、属性の変更は常にプロパティを計算します
コードをコピー
コードをコピー
4. 对于一些和路径相关的属性,两者取得值也不尽相同,但是同样attribute取得是字面量,property取得是计算后的完整路径
attr和prop
相信看完上面内容,大家就明白为什么jQuery要添加prop方法了,在jQuery API中也有专门解释
Attributes VS. Properties
在一些特殊的情况下,attributes和properties的区别非常大。在jQuery1.6之前,.attr()方法在获取一些attributes的时候使用了property值,这样会导致一些不一致的行为。在jQuery1.6中,.prop()方法提供了一中明确的获取property值得方式,这样.attr()方法仅返回attributes。
比如,selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, 和defaultSelected应该使用.prop()方法获取/设置值。 在jQuery1.6之前这些不属于attribute的property需要用.attr()方法获取。这几个并没有相应的attibute,只有property。
关于布尔类型 attributes,比如一个这样的HTML标签,它在JavaScript中变量名为elem
elem.checked |
true (Boolean) Will change with checkbox state |
$( elem ).prop( "checked" ) |
true (Boolean) Will change with checkbox state |
elem.getAttribute( "checked" ) |
"checked" (String) Initial state of the checkbox; does not change |
$( elem ).attr( "checked" ) (1.6)
|
"checked" (String) Initial state of the checkbox; does not change |
$( elem ).attr( "checked" ) (1.6.1+)
|
"checked" (String) Will change with checkbox state |
$( elem ).attr( "checked" ) (pre-1.6)
|
true (Boolean) Changed with checkbox state |