一言で言えば、データ属性は、非表示の入力が別の DOM 要素内にあることができない領域である属性によって記述された要素に添付でき、その使用はフォームに限定されます (とにかく良い方法で)。非表示の入力は実際の DOM 要素ですが、data 属性はまあ...その属性なので、DOM 要素にバインドできます。大部分はそれで十分ですが、さらに情報が必要で、例を読み続けたい場合は、ちょっと長いので注意してください。英語は私の母国語ではありません。
基本的に、 data 属性は DOM 要素に追加情報を追加するために作成されました。それ以外の場合は、class や古き良き id などの既存の属性では関連付けることができません。
これは、主に Web ベースのアプリ、またはより具体的には、データ駆動型の属性の必要性が通常の Web サイトよりもはるかに広範囲にわたる (背後に CMS がある場合でも) SaaS に影響します。
選択肢が 2 つしかなかった何年も前に、私はこの属性について空想にふけっていました。
元々作成または設計されていないものに html 属性を使用する
- トークンを含む html 属性を使用して、クライアント側またはサーバー側の関数 (分割、スプライス、爆発) でそれらをデコードします。
このアプローチの問題点は、どのように見ても、使用するように設計された方法で html 属性を使用していないことです。
Html はマークアップ言語であるため、データの処理や動作を操作するために使用できないデータ ドリブンの属性を自然に持つことはありません。
当時の基本的なシナリオは、幅と高さが異なるすべてのデータ入力フォーム (クライアント、製品、サプライヤーなど) を単一の jQuery ダイアログにロードすることでした。そうすれば、クライアント側のスクリプトははるかに小さくなり、クライアントから要求されたアプリに新しいフォームが追加されるたびに、新しいダイアログを追加する必要があります。
これは、データ属性が登場する前に私が行っていた方法です。
クリックして新しい製品を追加
id トークン内には、次の 3 つの値がありました。
- サーバーからロードされるフォーム
- ダイアログウィンドウの幅
- ダイアログウィンドウの高さ
別のアプローチとして href 属性を使用することもできますが、これは単に id を使用するよりもはるかに悪い方法です。なぜなら、href 属性は、処理するデータを保持するためではなく、DOM 要素または別のソースを指すことを意図しているからです。
どちらのアプローチでも、分割または同様の関数を使用してトークンを分解する必要があります。
これは、素晴らしいデータ属性を使用して今行う方法です。
クリックして新しい製品を追加
この方法ではトークンは必要ありません。古き良き $(this).attr('data-form');, $(this).attr('data-dwith'); で各属性の値を取得できます。等々。
IMHO私は、HTML要素に少し余分なデータを追加する方が、はるかに長いjavascriptファイルを作成して、より重くて複雑にする方が良いと思います。