検索
ホームページウェブフロントエンドjsチュートリアルJavaScriptコードをjquery配下に整理する(js関数化)_基礎知識

魔法の "$" 関数から始めます
"$" 関数は、ドキュメントが読み込まれた後にイベントを指定されたボタンにバインドします。これらのコードは、単一の Web ページで正常に機能します。ただし、他のページがある場合は、このプロセスを繰り返す必要があります。

コードをコピー コードは次のとおりです。

Say Hello


ボタンに別のアクションが必要な場合はどうすればよいでしょうか?たとえば、次のようになります。
コードをコピー コードは次のとおりです:


Unlike it


コードをコピー コードは次のとおりです。 SayHello javascript:; " class="sayUnlike">それとは異なります



ただし、これらの 2 種類のボタンが順番に使用されるわけではありません。ページ上で追加のセレクターを使用するには、必要な調整を行う必要があります。これは、クラスベースのセレクターのパフォーマンスが ID セレクターに比べて非常に高価であるためです。すべての DOM 要素を走査し、正規表現を使用してクラスに一致させる必要があります。属性を使用して、条件を満たす要素を選択します。



コードをコピー
コードは次のとおりです。 'A' ){?> $(function(){
$('.sayHello').click(function(){
alert ('Hello world!')
});
page == 'B'){?>
if($page == 'A' または $page == "C" で、$page は "D" ではありません){ ?>
} ?> if ($page == "B" または $page == "E" かつ $page が "X" ではない){ ?> if($page == "B" または $page == "C "){ ?> } ? ;
これは非常に問題です。すべてのイベントをバインドするには、1 つのページに多くのコード スニペットを読み込む必要があります。複数の JS ファイルに異なるコードを読み込むと、複数のページのリソース消費が増加します。管理とユーザー エクスペリエンスに問題があるため、より良いソリューションを見つける必要があります。
クラスセレクターのオーバーヘッドが非常に高いため、1 回のスキャンですべてのイベントをバインドできますか?試してみましょう:
コードをコピー コードは次のとおりです:


// グローバル名前空間を登録します。
var Yottaa = Yottaa ||
Yottaa.EventMonitor = function(){
this.listeners = {}; ;
}
//すべてのイベントをバインドします。
Yottaa.EventMonitor.prototype.subscribe=function(msg, callback){
var lst = this.listeners[msg]; lst) {
lst.push(callback);
} else {
this.listeners[msg] = [callback];
}
}
// イベントモニターを作成する
var events_monitor = new Yottaa.EventMonitor();
functionload_event_monitor(root){
var re = /a_(w )/; //すべてのイベント オブジェクトをフィルタリングします。 🎜>var fns = {};
$(".j", root).each(function(i) {
var m = re.exec(this.className);
if (m) {
var f = fns[m[1]];
if (!f) { //イベントハンドラー関数が存在しない場合は、関数オブジェクトを作成します。
f = eval("Yottaa. init_" m[1] );
fns[m[1]] = f;//バインディング関数を呼び出します。
}
f && f(this);
}
} );
}
$(function(){
// dom の準備ができたら、すべてのイベントをバインドします。
load_event_monitor(document);
});
Yottaa.init_sayhello = function(obj){
$(obj).click(function(){
alert('Hello world!');
}); }
よかったです。init_unlike = function(obj){
$(obj).click(function(){
alert('私はそれとは違います。');
});
script>


DOM 要素は次のように記述されます:
Say Hello a> a
Say Like Like
これは、クラス セレクターを 1 回実行するだけで済むようです。ページがロードされます (上記のコード (コード内のすべての '.j' 要素) では、イベントにバインドする必要があるすべての要素が見つかります。バインドされる特定のコンポーネントは、クラス名の a_xxx によって決まります。これは Yottaa.init_xxx に対応し、現在の要素の参照をパラメータとしてイベント ロジックに渡します。
この処理モードでは、イベント処理ロジックを手動で再度記述して $(function(){ .... }) のような初期化関数に入れる必要はありません。コンポーネントの「コンテナ」に 2 つのクラスを追加します:「ja_XXX」 このプログラムは、一般的に使用される展開/縮小効果、全選択/反転選択効果などの作業を完了するのに役立ちます。タブ切り替えなど、このメソッドは他の簡単な機能にも使用できます。これが伝説の特効薬なのだろうか?いいえ、それほど単純ではありません。このアプローチにはいくつかの弱点があるはずです。
コンポーネントに初期化パラメータを渡すことができません。
コンポーネントの包含関係を反映することも、継承やポリモーフィズムなどのオブジェクト指向機能を使用してプログラムを書きやすく理解しやすくすることもできません。
特定の関係を持つ一部のコンポーネントを処理するのは少し面倒で、合理的なイベント通知メカニズムはありません。
最初のものを見てみましょう: パラメータの受け渡しに関しては、複数のエントリのリストの多くのシナリオでは、通常、各エントリに対応する要素に一意の ID を割り当てます。これらの要素の動作は似ています。唯一の違いは、メッセージ リストや製品リストなど、サーバー側の番号です。 id 属性を使用して何かを行うことができます。以下のコードを見てください。id 属性を使用して、エントリに対応するサーバー側の番号をサーバー側に送り返します。後続のイベント ロジック処理におけるコールバック関数のパラメーター。




コードをコピー


コードは次のとおりです:
varコンポーネントid = $(this).attr('id').split(' -') [1]; $.get('/server/controller/method', {id:component_id}, function(data){
if(data){
alert('からのメッセージサーバー: ' データ );
}

サーバー メッセージを表示します。


より複雑なシナリオでは、ページ上のインライン コードを使用して、必要な情報をコンポーネントに渡すことができます。
コードをコピーします コードは次のとおりです:

Yottaa.globalConst = {
User :{
家族名: "Jhone",
名: 'ブルース'
},
URL:{
サイト名: 'yottaa.com',
スコア: 98
}
}
Yottaa.componentMetaData = {
compoment_id_1:{ ...... },
component_id_2:{ ...... }
}; >
上記では可能なコード編成方法について説明しましたが、すべてのプロジェクトに適しているわけではありません。私たちがしなければならないことは、現状に基づいて比較的低コストのリファクタリング ソリューションを見つけることです。次の点を考慮します。
イベント バインディング コードと要素のコンポーネント コードを分離します。コンポーネント コードには、jquery ライブラリ、関連する拡張プラグイン、およびチャートボックスやその他のコンテンツなどの独自に作成したウィジェットが含まれます。
イベント バインディングと処理ロジック: さまざまなコンポーネントに従って複数のモジュールに分割され、各モジュールは関数内に配置されます。
このページでは、このページでどのモジュールを初期化するかを指定し、グローバル イベント バインダーによる統合処理のためのリストを提供する必要があります。
コードの一部を示してみましょう:


コードをコピーします コードは次のとおりです:
function init_loginPanel = function(){
var コンテナ = $('#login_button'); function(){
....
});
}
function init_chart = function(){
....
}
/ /global static init メソッド
Yottaa.initComponents = function(components){
for(var i = 0;iif(typeof window[components[i]] = = 'Function' ){
window[components[i]]();
}
}
}
// 上記は「オールインワン」アセット ファイル内にあります。運用環境では
varコンポーネント = ['init_loginPanel', 'init_chart'];
var metaData = {
loginPanel: {},
chart: {},
.... ..
};
$(function(){
Yottaa.initComponents(components);
}); ここにページのインライン スクリプトがあります。 🎜>

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

pythonまたはjavascriptの方がいいですか?pythonまたはjavascriptの方がいいですか?Apr 06, 2025 am 12:14 AM

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptをインストールするにはどうすればよいですか?JavaScriptをインストールするにはどうすればよいですか?Apr 05, 2025 am 12:16 AM

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

クォーツでタスクが開始される前に通知を送信する方法は?クォーツでタスクが開始される前に通知を送信する方法は?Apr 04, 2025 pm 09:24 PM

Quartzタイマーを使用してタスクをスケジュールする場合、Quartzでタスク通知を事前に送信する方法、タスクの実行時間はCron式によって設定されます。今...

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター