それが一部の人々がそれらを承認しない理由であることは知っていますが、それは本当に問題ですか? JavaScript と対話し、サーバーとの間で情報を保存および送信する際に提供される力は、検証の懸念を上回ると思います。何か不足していますか?「無効な」HTML の影響は何ですか? とにかく、カスタム DTD はそれらを解決しないのでしょうか?
15 に答える
はい、「データ」を使用して合法的にカスタム属性を追加できます。
例えば:
<div id="testDiv" data-myData="just testing"></div>
その後、jqueryの最新バージョンを使用して次のようなことを行います。
alert($('#testDiv').data('myData'))
またはデータ属性を設定するには:
$('#testDiv').data('myData', 'new custom data')
また、jQueryはほとんどすべてのブラウザで機能するため、問題はありません;)
アップデート
- javascriptエンジンに関する限り、一部のブラウザではdata-myDataがdata-mydataに変換される場合があります。ずっと小文字にしておくのが最善です。
検証はそれ自体が目的ではありませんが、間違いを早期に発見し、複数の種類のブラウザーで使用したときに Web ページが直面する可能性のある不可解なレンダリングや動作の問題の数を減らすために使用するツールです。
カスタム属性を追加しても、現在これらの問題のいずれにも影響はなく、将来も影響を受ける可能性は低いですが、これらは検証されないため、ページの検証の出力を評価する際には、次のことを行う必要があります。重要な検証の問題とそうでないものを慎重に選択してください。ページを変更して再検証するたびに、この操作を繰り返す必要があります。ページが完全に検証されると、素敵な緑色の PASS メッセージが表示され、テストの次の段階、または行う必要がある次の変更に進むことができます。
class 属性に複数の値を格納することは、正しいコードのカプセル化ではなく、物事を行うための複雑なハック方法です。たとえば、jquery を使用するカスタム広告ローテーターを考えてみましょう。ページ上で行うほうがはるかにきれいです
<div class="left blue imagerotator" AdsImagesDir="images/ads/" startWithImage="0" endWithImage="10" rotatorTimerSeconds="3" />
簡単な jquery コードでここから作業を行います。すべての開発者または Web デザイナーは、広告ローテーターで作業し、要求されたときに値をこれに変更することができます。
1 年後にプロジェクトに戻るか、以前の開発者が分裂して太平洋のどこかの島に行った新しいプロジェクトに参加することは、次のようにコードが暗号化された不明瞭な方法で書かれている場合、意図を理解しようとするのが地獄になる可能性があります。
<div class="left blue imagerotator dir:images-ads endwith:10 t:3 tf:yes" />
C# やその他の言語でコードを記述する場合、すべてのカスタム プロパティを 1 つのプロパティにスペースで区切られた文字列として配置するコードを記述せず、アクセスまたは書き込みが必要になるたびにその文字列を解析する必要があります。あなたのコードに取り組む次の人について考えてください。
検証が必要なのは、今日は問題にならないかもしれませんが、明日問題になるかどうかはわかりません (そして、マーフィーの法則により、明日は問題になるでしょう)。
将来性のある代替手段を選択することをお勧めします。それらが存在しない場合 (この特定のケースでは存在します)、進むべき道は、将来の保証の代替手段を発明することです。
カスタム属性を使用してもおそらく害はありませんが、害がないと思われる (確実ではない) という理由だけで、潜在的に有害なソリューションを選択する必要はありません。将来性のある代替案がコストがかかりすぎたり扱いにくい場合は、これについてさらに議論する価値があるかもしれませんが、そうではないことは確かです.
古い議論ですが、それでも; 私の意見では、html はマークアップであり、プログラミング言語ではないため、マークアップの「エラー」に対して常に寛大に解釈する必要があります。ブラウザは完全にそうすることができます。これは今後も変わることはないと思いますし、変わるべきではありません。したがって、唯一の重要な実用的な基準は、HTML がほとんどのブラウザで正しく表示され、たとえば数年はそのまま表示されるということです。それ以降は、いずれにせよ html が再設計される可能性があります。
マークアップが無効な場合、Jquery .html(マークアップ) は機能しません。
検証
検証を提供するためにカスタム属性は必要ありません。より良いアプローチは、フィールドの実際のタスクに基づいて検証を追加することです。
クラスを使用して意味を割り当てます。私は次のようなクラス名を持っています:
date
(日付)zip
(郵便番号)area
(地域)ssn
(社会保障番号)
マークアップの例:
<input class="date" name="date" value="2011-08-09" />
JavaScript の例 (jQuery を使用):
$('.date').validate(); // use your custom function/framework etc here.
特定のまたはシナリオに特別なバリデーターが必要な場合は、特別な場合に新しいクラスを発明する (またはセレクターを使用する) だけです。
2 つのパスワードが一致するかどうかを確認する例:
<input id="password" />
<input id="password-confirm" />
if($('#password').val() != $('#password-confirm').val())
{
// do something if the passwords don't match
}
(このアプローチは、jQuery 検証と mvc .net フレームワークの両方、およびおそらく他のフレームワークでも非常にシームレスに機能します)
ボーナス: スペースで区切られた複数のクラスを割り当てることができます class="ssn custom-one custom-two"
「サーバーとの間で」情報の送信
データを返す必要がある場合は、 を使用します<input type="hidden" />
。それらはすぐに使用できます。
(ユーザーがほとんど手間をかけずに変更できるため、機密データを非表示の入力で渡さないようにしてください)