3

言語設計の観点から、要素が1つしかないクラスを持つことができる場合、HTMLのid属性を作成する意味は何ですか?すべてにクラスを使用し、マークアップを複雑にしないのはなぜですか?

考えられる説明は3つ考えられますが、満足のいくものではないので、なぜHTMLにidが含まれているのかご存知でしょうか。私の考えは次のとおりです。

  1. IDの存在は、CSSスタイルの作成に役立ちます。これは、IDの特異性が高いため、クラスの他のメンバーに与えられたスタイルをオーバーライドするクラスの1つのメンバーにIDを与えることができるためです。代わりに追加のクラスを指定して、そのクラスのスタイルを単一要素に指定されたスタイルのセクションのスタイルシートの下部に配置できるため、この説明は完全には満足できません。
  2. jQueryで要素を選択すると、そのIDを持つ要素が見つかるとすぐにDOMトラバーサルが停止する可能性があります。したがって、IDが存在すると、選択の実行が速くなります。IDとクラスがすでに存在してからずっと後にjQueryが作成されたと確信しているので、この説明は私を満足させません。
  3. 言語機能としてIDを使用すると、一意であると想定されるスタイル(およびセレクター)が1つの要素にのみ適用されるようにすることができます。これは、そうでない場合に問題が発生するためです。同じIDで2つの要素を誤って作成したときにサイトが破損することは、問題が発生したことを通知する特に効果的な方法ではないように思われるため、この説明は私を満足させません。
4

5 に答える 5

4

HTMLの最初の公開された説明は、1991年後半にBerners-Leeによってインターネット上で最初に言及された「HTMLタグ」と呼ばれるドキュメントでした

アンカータグの説明があります:

<A NAME=xxx HREF=XXX> ... </A>

HREF
...This allows for the form HREF=#identifier to
refer to another anchor in the same document.
NAME
The attribute NAME allows the anchor to be the destination of a link.

ここでのNAME属性は、要素のIDの前身であると思います。これにより、ハイパーテキストページの目的の部分に直接リンクできます(同じページであっても)。

于 2013-01-25T22:00:59.893 に答える
3

ID は一意の値であるため、html を javascript などで解析すると、スクリプトがヒットする要素を確認できます。

于 2013-01-25T21:38:41.503 に答える
2

Javascriptの場合getElementById、とにかく数倍高速ですgetElementsByClassName

テスト オペレーション/秒
getElementById 269,235
getElementsByClassName 86,369

ref

仕様からの詳細情報

タイプ ID の属性を特別なものにしているのは、それらを運ぶ要素のタイプに関係なく、2 つのそのような属性が適合ドキュメントで同じ値を持つことができないということです。ドキュメントの言語が何であれ、ID 型の属性を使用してその要素を一意に識別できます。

したがって、クラスセレクターが偶然にしか識別できなかった要素を一意に識別する方法です。

ref

于 2013-01-25T21:39:30.793 に答える
1

非常に多くの理由がありますが、そのほとんどは CSS に関係していません。たとえば、ajax および JS ライブラリは一意の ID を必要とすることが多く、ID は URL ハッシュを使用してアンカーとして機能できます。

于 2013-01-25T21:37:27.513 に答える
0

XML は HTML から派生したものですが、より一般的なデータに使用されます。XML では、一意の ID を持つことが望ましい場合がよくあります (データベースで必要になることが多いのと同じ方法です)。XML では検証の自動化に多大な労力が費やされているため、最善の方法は、単純に id 属性を言語要素として追加することでした。このように、同じ値が 2 つの id 属性に割り当てられている場合、XML ベリファイアはエラーを出力できます。

その後、多くの XML 機能が HTML に戻ってきましたが、id はその 1 つにすぎないと思います。厳密に必要というわけではありませんが、Java Script と組み合わせると便利です。

于 2013-01-25T22:08:16.760 に答える