目立たない JavaScript_javascript スキルのための 7 つの原則のコレクション
スクリプトの設計を始める前に、まず考慮すべきことは、スクリプトを作成する HTML コードをチェックし、目標の達成に役立つものがないかどうかを確認することです。
1. いかなる思い込みもしない
(JavaScript は信頼性の低いアシスタントです)
控えめな JavaScript の最も重要な特徴は、おそらく、あらゆる思い込みをやめなければならないことです。 :
* JavaScript が利用できるとは想定しないでください。JavaScript に直接依存するのではなく、利用できない可能性が高いと想定したほうがよいでしょう。
* テストして機能することを確認するまで、ブラウザーがメソッドとプロパティをサポートしていると想定しないでください。
* HTML コードが思っているほど正しいとは考えず、毎回チェックして、利用できない場合は何もしません。
* JavaScript 関数を入力デバイスから独立させます
* 他のスクリプトが JavaScript の機能に影響を与える可能性があることに注意してください。そのため、スクリプトのスコープが可能な限り安全であることを確認してください。
スクリプトの設計を始める前に、まず考慮すべきことは、スクリプトを作成する HTML コードをチェックし、目標の達成に役立つものがないかどうかを確認することです。
2. フックとノードの関係を見つける
(HTML はスクリプト作成の基礎です)
スクリプトを書き始める前に、JavaScript を作成する HTML を確認してください。 HTML が整理されていない、または不明な場合、適切なスクリプト ソリューションを用意することはほぼ不可能です。JavaScript で過剰なマークアップを作成するか、アプリケーションが JavaScript に過度に依存する可能性があります。
HTML では考慮すべき点がいくつかあります。それは、フックとノードの関係です。
<1>.HTML フック
HTML の元の最も重要なフックは ID であり、ID には最速の DOM メソッドである getElementById を通じてアクセスできます。有効な HTML ドキュメント内のすべての ID が一意である場合 (IE には名前と ID に関するバグがありますが、優れたライブラリによってはこの問題が解決されます)、ID を使用することは安全で信頼性が高く、テストが簡単です。
その他のフックには HTML 要素と CSS クラスがあります。HTML 要素には getElementsByTagName メソッドを通じてアクセスできますが、CSS クラスにはほとんどのブラウザでネイティブ DOM メソッドを通じてアクセスできません。ただし、CSS クラス名にアクセスするメソッド (getElementsByClassName と同様) を提供する外部ライブラリが多数あります。
<2>.HTML ノードの関係
HTML に関するもう 1 つの興味深い点は、次の質問について考えてみましょう:
* 最も簡単に到達できる最小限の DOM を渡すにはどうすればよいでしょうか。ターゲットノード?
* どのタグを変更すると、変更が必要なできるだけ多くの子ノードにアクセスできるようになりますか?
* 特定の要素には、別の要素に到達するために使用できるどのような属性または情報がありますか?
DOM のトラバースはリソースを大量に消費し、時間がかかるため、ブラウザですでに使用されているテクノロジを使用して実行する必要があります。
3. 走査を専門家に任せる
(CSS、DOM の走査を高速化)
走査する DOM に関するメソッドまたはプロパティ (getElementsByTagName、nextSibling、previousSibling、parentNode など) を使用するDOM は多くの人を混乱させているようですが、これは興味深いことです。興味深いのは、これらのことを別のテクノロジーである CSS を通じてすでに実行していることです。
CSS は、CSS セレクターを使用してターゲット要素にアクセスし、DOM をトラバースすることでその視覚的プロパティを変更するテクノロジーです。 DOM を使用する JavaScript の複雑な部分は、CSS セレクターで置き換えることができます:
コードをコピー コードは次のとおりです:
var n = document.getElementById ('nav');
if(n){
var as = n.getElementsByTagName('a');
if(as.length > 0){
for (var i= 0;as[i];i ){
as[i].style.color = '#369';
as[i].style.textDecoration = 'none'; }
}
}
/* 次のコードは上記と同じ機能です*/
#nav a{
color:#369;
text-decoration:none;
}
これは有効に活用できる非常に強力なテクニックです。これを実現するには、DOM 内の高レベルの要素にクラスを動的に追加するか、要素 ID を変更します。 DOM を使用して CSS クラスをドキュメントの本文に追加すると、デザイナーはドキュメントの静的バージョンと動的バージョンを簡単に定義できます。
JavaScript:
コードをコピーします コードは次のとおりです。
vardynamicClass = 'js'; document.body ;
b.className = b.className ? b.className ' js' : 'js';
CSS:
/* 静的バージョン */
#nav {
...
}
/* 動的バージョン*/
body.js #nav {
....
}
4. ブラウザとユーザーを理解する
(既存の使用パターンに基づいて必要なものを作成する)
控えめな JavaScript の重要な部分は、ブラウザの動作方法 (特にブラウザの仕組み) を理解することです。クラッシュ)とユーザーが期待するもの。ブラウザに関係なく、JavaScript を使用してまったく異なるインターフェイスを簡単に作成できます。ドラッグ アンド ドロップ インターフェイス、折りたたみ領域、スクロール バー、スライダーはすべて JavaScript を使用して作成できますが、この問題は単純な技術的な問題ではなく、次の点について考慮する必要があります:
* この新しいインターフェイスは独立しているかどうか。入力デバイスの?そうでない場合、何を信頼できますか?
* 作成する新しいインターフェイスはブラウザまたは他のリッチ インターフェイスのガイドラインに従っていますか (マウスを使用してマルチレベル メニュー間を直接切り替えることができますか? それともタブ キーを使用する必要がありますか?)
* とは関数を提供する必要がありますか? しかし、この関数は JavaScript に依存していますか?
必要に応じて DOM を使用して何もないところから HTML を作成できるため、最後の質問は実際には問題ありません。この例としては、「印刷」リンクがあります。ブラウザにはドキュメントを印刷するための JavaScript 以外の機能が提供されていないため、このタイプのリンクを作成するには DOM を使用する必要があります。展開および折りたたみコンテンツ モジュールを実装するクリック可能なタイトル バーにも同じことが当てはまります。タイトル バーはキーボードでアクティブにすることはできませんが、リンクはアクティブにすることができます。したがって、クリック可能なタイトル バーを作成するには、JavaScript を使用してリンクを追加する必要があります。そうすれば、キーボードを使用するすべてのユーザーがコンテンツ モジュールを折りたたんだり展開したりできるようになります。
この種の問題を解決するための優れたリソースは、デザイン パターン ライブラリです。ブラウザー内のどのものが入力デバイスに依存しないのかを知ることについては、経験の蓄積に依存します。最初に理解する必要があるのは、イベント処理メカニズムです。
5. イベントを理解する
(イベント処理により変更が発生します)
イベント処理は、目立たない JavaScript への第 2 ステップです。重要なのは、すべてをドラッグ可能にしたり、クリック可能にしたり、インライン処理を追加したりすることではなく、イベント処理は完全に分離できるものであることを理解することです。 HTML、CSS、JavaScript は分離しましたが、イベント処理の分離はそれほど進んでいません。
イベント プロセッサは、ドキュメント内の要素で発生する変更を監視します。イベントが発生すると、プロセッサは素晴らしいオブジェクト (通常は e という名前のパラメータ) を見つけ、それが何であるか、また何が可能かを要素に伝えます。それで終わりました。
ほとんどのイベント処理で本当に興味深いのは、アクセスしたい要素だけでなく、DOM の上位のすべての要素でも発生することです (ただし、すべてのイベントがこのようになるわけではなく、フォーカス イベントやブラー イベントは例外)。たとえば、この機能を使用してナビゲーション リストにイベント ハンドラーを 1 つだけ追加し、イベント ハンドラー メソッドを使用して実際にイベントをトリガーした要素を取得できます。この手法はイベント委任と呼ばれ、次のような利点があります。
* すべての要素をチェックするのではなく、要素が存在するかどうかだけをチェックするだけで済みます。
* 対応するイベント ハンドラーを削除せずに、子ノードを動的に追加または削除できます。
* 異なる要素の同じイベントに応答できます
もう 1 つ覚えておくべきことは、イベントが親要素に伝播している間にイベントを停止でき、HTML 要素 (リンクなど) のデフォルトの動作をオーバーライドできることです。 )。ただし、ブラウザーは HTML 要素に理由があって動作を与えるため、これは良い考えではない場合があります。たとえば、リンクはページ内のターゲットを指す場合があり、リンクを変更しないでおくと、ユーザーはページの現在のスクリプト状態をブックマークすることもできます。
6. 他の人のことを考える
(名前空間、スコープ、パターン)
あなたのコードがドキュメント内の唯一のスクリプト コードになることはほとんどありません。したがって、他のスクリプトによってオーバーライドされる可能性のあるグローバル関数やグローバル変数がコード内に存在しないことを確認することが特に重要です。この問題を回避するために使用できるパターンがいくつかありますが、最も基本的なパターンは、var キーワードを使用してすべての変数を初期化することです。次のスクリプトを作成するとします。
コードをコピー コードは次のとおりです:
var nav = document.getElementById('nav') ;
function init(){
// 処理
}
function show(){
// 処理
}
function restart(){
// do things
}
上記のコードには、nav というグローバル変数と、init、show、reset という 3 つの関数が含まれています。これらの関数は nav 変数にアクセスでき、関数名を通じて相互にアクセスできます:
コードをコピー コードは次のとおりです:
var nav = document .getElementById('nav');
関数 init(){
show();
if(nav.className === 'show'){
reset(); 🎜>}
// 実行
}
function show(){
var c = nav.className;
// 実行
}
function restart(){
// 何かをします
}
コードをオブジェクトにカプセル化して、上記のグローバル コーディングを回避できます。これにより、関数をオブジェクト内のメソッドに変換したり、グローバル変数をオブジェクト内のプロパティに変換したりできます。 メソッドとプロパティを定義するには「名前コロン」メソッドを使用する必要があり、各プロパティまたはメソッドの後に区切り文字としてカンマを追加する必要があります。
コードをコピー コードは次のとおりです:
var myScript = {
nav:document.getElementById('nav'),
init:function(){
// 処理
},
show:function(){
// 処理
},
reset:function() {
// do things
}
}
すべてのメソッドとプロパティは、「クラス名ドット演算子」を使用して外部および内部で使用できます。 。
コードをコピー コードは次のとおりです:
var myScript = {
nav:document.getElementById('nav'),
init:function(){
myScript.show();
if(myScript.nav.className === 'show'){
myScript.reset();
/ / 処理
},
show:function(){
var c = myScript.nav.className
// 処理
},
reset:function; (){
// do things
}
}
このパターンの欠点は、メソッドから他のメソッドまたはプロパティにアクセスするたびに、前に置く必要があります オブジェクトの名前を追加すると、オブジェクト内のすべてに外部からアクセスできるようになります。コードの一部だけをドキュメント内の他のスクリプトからアクセスできるようにしたい場合は、次のモジュール パターンを検討してください:
コードをコピー コードは次のとおりです:
var myScript = function(){
//これらはプライベート メソッドとプロパティです
var nav = document.getElementById('nav');
function init(){
// 処理
}
function show(){
// 処理
}
function restart(){
// 処理
}
/ /パブリック メソッドとプロパティは、オブジェクト構文を使用して return ステートメントでラップされます。
return {
public:function(){
},
foo:'bar'
}
} ( );
前のコードと同じ方法で、返されたパブリック プロパティとメソッドにアクセスできます (この例では、myScript.public() と myScript)。しかし、ここにはもう 1 つの不快な点があります。外部からパブリック メソッドにアクセスする場合、または内部のプライベート メソッドからアクセスする場合は、依然として長い名前を記述する必要があります (オブジェクトの名前は非常に長くなる場合があります)。これを回避するには、それらをプライベートとして定義し、return ステートメントでエイリアスのみを返す必要があります:
コードをコピー コードは次のとおりです:
var myScript = function(){
// これらはプライベート メソッドとプロパティです
var nav = document.getElementById('nav');
function init(){
// doスタッフ
}
function show(){
// スタッフ
// スタッフ
}
function restart(){
// スタッフ
}
var foo = 'bar';
function public(){
}
return {
public:public,
foo:foo
}
}() ;
これにより、コード スタイルの一貫性が保証され、メソッドまたはプロパティにアクセスするために短いエイリアスを使用できます。
メソッドやプロパティを外部に公開したくない場合は、すべてのコードを匿名メソッドにカプセル化し、定義直後に実行できます:
コードをコピー コードは次のとおりです。
(function(){
// これらはすべてプライベート メソッドとプロパティです。
var nav = document.getElementById('nav' );
function init(){
// 実行します
show() // ここにはクラス名のプレフィックスは必要ありません
}
function show(){
// 実行しますスタッフ
}
関数リセット(){
// スタッフ
}
})();
このパターンは、一度だけ実行され、他の関数に依存しないコード モジュールに最適です。
上記のルールに従うことで、コードはユーザーにとってより適切に機能するだけでなく、マシン上でのコードの実行も向上し、他の開発者のコードとより適切に連携できるようになります。ただし、考慮する必要があるグループが 1 つあります。
7.
を引き継ぐ開発者向けの考慮事項 (メンテナンスが容易になります)
スクリプトを本当に目立たないものにするための最後のステップは、スクリプトを作成した後に再確認することです。スクリプトが公開されたらコードを引き継ぐ開発者に注意してください。次の質問について考えてみましょう:
* すべての変数名と関数名は意味があり、理解しやすいものですか?
* コードはよく整理されていますか?最初から最後までスムーズに流れますか?
* すべての依存関係は明らかですか?
* 混乱を引き起こす可能性のあるコメントが可能な限り追加されていますか?
注意すべき最も重要なことは、ドキュメント内の HTML コードと CSS コードは JavaScript よりも変更される可能性が高いことを認識することです (視覚効果を担うため)。したがって、スクリプト コードにはエンド ユーザーが参照できるクラスと ID を含めず、構成情報を保持するオブジェクトに分離します。
コードをコピー コードは次のとおりです:
myscript = function(){
var config = {
navigationID: 'nav' ,
visibleClass:'show'
};
var nav = document.getElementById(config.navigationID);
function init(){
show(); if(nav .className === config.visibleClass){
reset();
// 処理
}; = nav.className;
// 処理
} {
// 処理
}();
このようにして、管理者は他のコードを変更せずにこれらのプロパティを変更する場所を知ることができます。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScript は Web 開発で広く使用されているプログラミング言語であり、WebSocket はリアルタイム通信に使用されるネットワーク プロトコルです。 2 つの強力な機能を組み合わせることで、効率的なリアルタイム画像処理システムを構築できます。この記事では、JavaScript と WebSocket を使用してこのシステムを実装する方法と、具体的なコード例を紹介します。まず、リアルタイム画像処理システムの要件と目標を明確にする必要があります。リアルタイムの画像データを収集できるカメラ デバイスがあるとします。
