ハッシュ属性は、URL のアンカー部分 (# 記号から始まる部分) である読み取りおよび書き込み可能な文字列です。
文法
location.hash
私たちのプロジェクトには、ajax クエリ フォーム + 結果リスト ページが多数あります。クエリ結果は ajax によって返されるため、ユーザーがリスト内の項目をクリックして詳細ページに入り、ブラウザーのバックをクリックすると、ボタンをクリックして ajax クエリ ページに戻ると、この時点でクエリ ページのフォームと結果がデフォルトの状態に戻っていることがわかります。
ページに戻るたびにクエリ条件を再入力する必要がある場合、またはリスト内の特定のページに移動する必要がある場合、ユーザーはこのエクスペリエンスに本当に夢中になるでしょう。
私たちのプロジェクトでは、ページの状態を保存するために location.hash を処理する非常に単純な JavaScript 基本クラスを作成しました。今日はそれを共有します。
(この記事の内容は、クラスの定義、継承、仮想メソッド、リフレクションなど、JS オブジェクト指向の知識が含まれるため、JavaScript 初心者にとっては少し難しいかもしれません)
まずニーズを見てみましょう
私たちのプロジェクトは WeChat をベースにした H5 タスク管理システムです。完成するページのプロトタイプは次のとおりです。
要件は非常に明確である必要があります。つまり、クエリ フォームをクリックし、ajax を使用してクエリ結果を返し、リスト内のタスクをクリックしてタスクの詳細ページに移動します。管理者(プロジェクトマネージャー)は通常、一度に複数のタスクを処理するため、タスク詳細ページとクエリ一覧ページを常に切り替えます。このとき、クエリページの状態がリターンキーを押しても保存できない場合は、クエリページの状態が保存されません。毎回クエリ ページに戻る必要があり、クエリ条件を再入力するという経験は絶対に耐えられません。
したがって、ユーザーが戻るボタンを押したときにクエリ条件と結果がまだそこにあるように、ページのステータスを保存する方法を見つける必要があります。
ソリューションのアイデア
ページのステータスを保存するには多くのアイデアがありますが、location.hash を使用するのが最良の方法であると考えられます。
アイデアは次のとおりです:
1. ユーザーがクエリ条件を入力して [OK] をクリックした後、クエリ条件を文字列にシリアル化し、「#」を介して URL の末尾にクエリ条件を追加して新しい URL を取得し、location を呼び出します。 replace(new url) を使用して、ブラウザのアドレス バーのアドレスを変更します。
2. ユーザーが戻るボタンを押してクエリ ページに戻るとき (ページが読み込まれたときとも言えます)、location.hash をクエリ条件に逆シリアル化し、クエリ条件をクエリ フォームに更新します。クエリを実行します。
アイデアは非常にシンプルです。重要な点は location.replace メソッドです。このメソッドはブラウザのアドレス バーの URL を変更するだけでなく、さらに重要なことに、window.history 内の現在のページのレコードを置き換えます。 location.replace メソッドが使用されていない場合、各ロールバックは前のクエリ条件に戻ります。もちろん、このような要件はプロジェクトによっては役立つ場合があります。
最終解決策
この記事が上記の解決策のアイデアを共有するだけであれば、あまり価値はありません。この記事の価値は、私たちが作成したシンプルだが強力な JavaScript クラスです。
上記の解決策を理解したら、次の簡単な JavaScript クラスを見てください:
(function() { if (window.HashQuery) { return; } window.HashQuery = function() { }; HashQuery.prototype = { parseFromLocation: function() { if (location.hash === '' || location.hash.length === ) { return; } var properties = location.hash.substr().split('|'); var index = ; for (var p in this) { if (!this.hasOwnProperty(p) || typeof this[p] != 'string') { continue; } if (index < properties.length) { this[p] = properties[index]; if (this[p] === '-') { this[p] = ''; } } index++; } }, updateLocation: function() { var properties = []; for (var p in this) { if (!this.hasOwnProperty(p) || typeof this[p] != 'string') { continue; } var value = this[p]; properties.push(value === '' ? '-' : value); } var url = location.origin + location.pathname + location.search + "#" + properties.join('|'); location.replace(url); } }; })();
このクラスには 2 つのメソッドしかありません。HashQuery.parseFromLocation() メソッドは location.hash から HashQuery サブクラスのインスタンスを逆シリアル化し、HashQuery.updateLocation() メソッドは現在の HashQuery サブクラスのインスタンスをシリアル化してウィンドウに更新します。 。 位置。
HashQuery クラスには属性がないことがわかります。これは、基本クラスのみを定義し、クラスの属性はすべてサブクラスで定義されているためです。クエリ条件は特定のページにどのような属性があるかのみを認識するため、これも現実的です。
また、ここではシリアル化とデシリアル化にも注意してください。ここでのシリアル化では、インスタンスのすべての文字列属性の値を (順番に) 区切るために JavaScript リフレクション メカニズムのみが使用されますが、シリアル化では文字列が "|" で区切られてからリフレクションが使用されます。それをインスタンスに (順番に) 追加します。
HashQuery クラスの使用方法
使い方はとても簡単です。
最初のステップは、サブクラスを定義し、次のコードのように必要なクエリ条件を文字列属性に追加することです。
(function() { window.TaskSearchHashQuery = function () { HashQuery.constructor.call(this); this.iterationId = ''; this.assignedUserId = ''; this.status = ''; this.keyword = ''; }; TaskSearchHashQuery.constructor = TaskSearchHashQuery; TaskSearchHashQuery.prototype = new HashQuery(); })();
(function() { var urls = { list: "/app/task/list" }; var hashQuery = null; var pager = null; $(document).ready(function () { hashQuery = new TaskSearchHashQuery(); hashQuery.parseFromLocation();//在这里调用的哦,从location反序列化object updateFormByHashQuery(); $("#btnSearch").click(function() { updateHashQueryByForm(); hashQuery.updateLocation();//在这里调用的哦,将查询条件序列化之后更新到location.hash $("#lblCount").html("加载中..."); pager.reload(); page.hideSearch(); }); pager = new ListPager("#listTasks", urls.list); pager.getPostData = function(index) { return "pageIndex=" + index + "&pageSize=" + "&projectId=" + page.projectId + "&iterationId=" + hashQuery.iterationId + "&assignedUserId=" + hashQuery.assignedUserId + "&status=" + hashQuery.status + "&keyword=" + hashQuery.keyword; }; pager.onLoaded = function() { $("#lblCount").html("共 " + $("#hfPagerTotalCount").val() + " 个任务"); $("#hfPagerTotalCount").remove(); }; pager.init(); }); function updateHashQueryByForm() { hashQuery.iterationId = $("#ddlIterations").val(); hashQuery.assignedUserId = $("#ddlUsers").val(); hashQuery.status = $("#ddlStatuses").val(); hashQuery.keyword = $("#txtKeyword").val(); }; function updateFormByHashQuery() { $("#ddlIterations").val(hashQuery.iterationId); $("#ddlUsers").val(hashQuery.assignedUserId); $("#ddlStatuses").val(hashQuery.status); $("#txtKeyword").val(hashQuery.keyword); }; })();
概要
これは、プロジェクトでページの状態を保存するために location.hash を使用することに関するすべての知識です。貴社の WEB プロジェクトでそのようなニーズにどのように対処すればよいかわかりません。
上記の内容は、編集者が紹介したlocation.hashでページのステータスを保存するテクニックですので、皆様のお役に立てれば幸いです。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

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