[解決済み] HTML属性 "class "と "id "の命名 - ダッシュとアンダーライン [closed].
質問
<div id="example-value">
または
<div id="example_value">
?
このサイトとTwitterは、最初のスタイルを使用しています。FacebookとVimeoは2番目のスタイルです。
どちらをお使いですか?
どのように解決するのですか?
ハイフンを使って、HTMLとJavaScriptを分離するようにします。
なぜかというと、以下をご覧ください。
ハイフンは CSS と HTML では有効ですが、JavaScript Objects では使用できません。
多くのブラウザは、HTML ID をウィンドウ/ドキュメント オブジェクトのグローバル オブジェクトとして登録しますが、大きなプロジェクトでは、これは本当に苦痛になります。
この理由から、私はハイフンを含む名前を使用します。このようにして、HTML IDは私のJavaScriptと決して衝突しません。
次のように考えてみましょう。
message.js
message = function(containerObject){
this.htmlObject = containerObject;
};
message.prototype.write = function(text){
this.htmlObject.innerHTML+=text;
};
html
<body>
<span id='message'></span>
</body>
<script>
var objectContainer = {};
if(typeof message == 'undefined'){
var asyncScript = document.createElement('script');
asyncScript.onload = function(){
objectContainer.messageClass = new message(document.getElementById('message'));
objectContainer.messageClass.write('loaded');
}
asyncScript.src = 'message.js';
document.appendChild(asyncScript);
}else{
objectContainer.messageClass = new message(document.getElementById('message'));
objectContainer.messageClass.write('loaded');
}
</script>
ブラウザがHTML IDをグローバルオブジェクトとして登録している場合、上記のメッセージは「未定義」ではないので失敗し、HTMLオブジェクトのインスタンスを作成しようとします。HTML IDの名前にハイフンが入っていることを確認することで、以下のようなコンフリクトを防ぐことができます。
message.js
message = function(containerObject){
this.htmlObject = containerObject;
};
message.prototype.write = function(text){
this.htmlObject.innerHTML+=text;
};
html
<body>
<span id='message-text'></span>
</body>
<script>
var objectContainer = {};
if(typeof message == 'undefined'){
var asyncScript = document.createElement('script');
asyncScript.onload = function(){
objectContainer.messageClass = new message(document.getElementById('message-text'));
objectContainer.messageClass.write('loaded');
}
asyncScript.src = 'message.js';
document.appendChild(asyncScript);
}else{
objectContainer.messageClass = new message(document.getElementById('message-text'));
objectContainer.messageClass.write('loaded');
}
</script>
もちろん、messageText や message_text を使うこともできますが、これでは問題が解決しませんし、後で誤って JavaScript のオブジェクトではなく HTML のオブジェクトにアクセスしてしまうという同じ問題にぶつかる可能性があります。
一つの発言として、あなたはまだwindow['message-text']を使うことによって、(例えば)windowオブジェクトを通してHTMLオブジェクトにアクセスすることができます。
関連
-
[解決済み】divの高さを画面の残りスペースで埋めるようにする
-
[解決済み] どのラジオボタンが選択されているかをjQueryで知るにはどうしたらよいですか?
-
[解決済み] リンクのように動作するHTMLボタンを作成する方法
-
[解決済み] div' コンテナに合わせて画像を自動リサイズするにはどうしたらいいですか?
-
[解決済み] セレクトボックスのプレースホルダーを作成するにはどうすればよいですか?
-
[解決済み] HTMLページからのリダイレクト
-
[解決済み] How do I style a <select> dropdown with only CSS?
-
[解決済み] Zalgoテキストはどのように機能しますか?
-
[解決済み] MIME-typeが原因でスタイルシートが読み込まれない
-
[解決済み] HTML Input="file" Accept Attribute File Type (CSV)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] BootstrapのCollapse Navbarが動作しない
-
[解決済み] <html xmlns="http://www.w3.org/1999/xhtml">」は何をするものですか?
-
[解決済み] 要素を水平方向にセンタリングする方法
-
[解決済み] 箇条書きのない順序なしリストが必要です。
-
[解決済み] HTMLのid属性に有効な値は何ですか?
-
[解決済み] divの中のテキストを縦に揃えるにはどうしたらいいですか?
-
[解決済み] 静的な HTML ページにファビコンを追加する
-
[解決済み] label要素の中にinput要素を入れるべきですか?
-
[解決済み] HTML Input="file" Accept Attribute File Type (CSV)
-
[解決済み】CSSセレクタ/HTML属性でダッシュが好まれるのはなぜですか?