4

純粋に学術的な目的でGmailのソースを表示していたのですが、これに出くわしました。

<input id=":3f4" 
    name="attach" 
    type="checkbox" 
    value="13777be311c96bab_13777be311c96bab_0.1_-1" 
    checked="">

不思議なことに、ほとんどの要素には:
Iで始まるIDがあります。ID属性の定義はこれだといつも思っていました。

IDトークンとNAMEトークンは、文字([A-Za-z])で始まる必要があり、その後に任意の数の文字、数字([0-9])、ハイフン( "-")、アンダースコア( "_")を続けることができます。 、コロン( ":")、およびピリオド( "。")。

それとも私は何か新しいものが欠けていますか?つまり、HTML5で大丈夫ですか?

4

1 に答える 1

9

許容度

最新の草案で許可されています:http ://www.w3.org/TR/html-markup/datatypes.html#common.data.id

次の制限がある文字列:
-少なくとも1文字の長さである必要があります
-スペース文字を含めることはできません

仕様には次の点も記載されています。

以前のバージョンのHTMLでは、ID値の内容に大きな制限が課されていました(たとえば、ID値を数字で始めることは許可されていませんでした)。

引用した定義は、HTML4仕様に表示されます。

IDに関するいくつかの考慮事項にアクセスする広くアクセスされているSOスレッドがあります(主にHTML 4の観点から)。

理論的根拠

それについてもっと考えた後、私はここに2つの良い質問があることに気づきました。

なぜスペックはこれを許可するのですか?

任意の文字を含むことができるIDは、CSSセレクター(適切なエスケープが使用されていない場合)、Sizzle(jQueryが使用する)パターンの一致、サーバーID(ASP.Net Webフォームが使用するなど)など、あらゆる種類のものを壊す可能性がありますおよびモデルプロパティから生成されたID(MVCパターンで行う場合など)。

これらすべてを除けば、HTML 5の主要な目標は、絶対に必要ではない制限を作成しないことであったと思います(これは、XHTMLの欠点でした)。目的がまだ特定されていないからといって、それが将来的にはないという意味ではありません。

動作しないものがたくさんありますが、たとえば、特定のものは問題なく動作しますdocument.getElementById(":foo")

http://jsfiddle.net/Xjast/

ほとんどの場合と同様に、開発者が使用しているツールに精通しているのは開発者の責任です。

なぜGoogleはこれを行うのですか?

明らかに、Gmailチームの一員でない限り、これに決定的に答えることはできません。ただし、Googleはコードを大幅に最小化し、難読化しています。また、大量のスクリプトを管理します。これは、明確に定義された規則を示唆しています。

ここに別の考えがあります。GoogleがCSSセレクターが特定の文字のエスケープを必要とするという事実を利用している場合はどうなりますか?これは、電子メールメッセージに含まれるコンテンツの誤ったスタイル変更を減らすのに大いに役立ちます。

于 2012-05-23T03:41:14.420 に答える