[解決済み] getAttribute() vs Element オブジェクトプロパティ?
質問
以下のような表現があります。
Element.getAttribute("id")
と
Element.id
は同じものを返します。
HTMLElementオブジェクトの属性が必要な場合、どちらを使うべきでしょうか?
これらのメソッドにクロスブラウザの問題はありますか?
getAttribute()
と
setAttribute()
?
または、オブジェクトのプロパティに直接アクセスする場合と、これらの属性メソッドを使用する場合のパフォーマンスへの影響はありますか?
どのように解決するのですか?
getAttribute
は
属性
を、DOM 要素の
el.id
は
プロパティ
を取得します。両者は同じではありません。
ほとんどの場合、DOMプロパティは属性と同期しています。
しかし、同期の
は同じ値を保証するものではありません。
. 典型的な例としては
el.href
と
el.getAttribute('href')
をアンカー要素とする。
例えば
<a href="/" id="hey"></a>
<script>
var a = document.getElementById('hey')
a.getAttribute('href') // "/"
a.href // Full URL except for IE that keeps '/'
</script>
このような動作が起こるのは W3C によると、href プロパティは整形されたリンクでなければなりません。ほとんどのブラウザはこの標準を尊重しています(そうでないブラウザを想像してみてください)。
にはもう一つのケースがあります。
input
's
checked
のプロパティがあります。DOM プロパティが返す
true
または
false
という文字列を返しますが、属性は
"checked"
または空の文字列を返します。
そして、同期されるプロパティとして
一方通行のみ
. その最たる例が
value
プロパティの
input
要素で使用できます。DOMプロパティを通してその値を変更しても、属性は変更されません(編集:より正確には最初のコメントを確認してください)。
これらの理由から、私はDOMの プロパティ を使用し、属性は使用しないことをお勧めします。
現実には、属性を使う必要があるのは2つのケースだけです。
- DOM プロパティに同期していないため、カスタム HTML 属性。
-
プロパティから同期されていない、組み込みの HTML 属性にアクセスするために、その属性が必要であることが確実な場合(例えば、オリジナルの
value
のinput
要素) の中にある。
より詳細な説明をお望みでしたら、ぜひとも このページ . 数分しかかかりませんが、その情報(ここにまとめたもの)に満足することでしょう。
関連
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] 要素を水平方向にセンタリングする方法
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] 2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] 文字列が空白であるかどうかをチェックする
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] jQueryで入力ファイルが空かどうかをチェックする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] HTMLのプロパティと属性の違いは何ですか?
-
[解決済み] JSのDateからDay名
-
[解決済み] JavaScriptを使用してHTML要素に属性を追加/更新するには?
-
[解決済み] javascript includes() 大文字小文字を区別しない
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)
-
[解決済み] HTML要素にスクロールバーがあるかどうかをチェックする
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行
-
[解決済み] JavaScriptの文字列プリミティブとStringオブジェクトの違いは何ですか?
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?