まず、外部リンクと内部リンクを分離できる必要があります。そのために、次の JQuery セレクターを作成しました。
$.expr[':'].internal = function (obj) {
return (obj.hostname == location.hostname);
};
$.expr[':'].external = function (obj) {
return (obj.hostname != location.hostname);
};
これにより、すべての内部リンクまたは外部リンクを選択できます$("a:internal")....
次に、すべての内部リンクでクリック イベントをオーバーライドし、デフォルトの動作をオーバーライドして、Href URL を取得し、href URL に対して ajax リクエストを実行して、結果を本文に吐き出す必要があります。
$("a:internal").click(ajaxLinkHandler);
function ajaxLinkHandler() {
$.get($(this).attr("href"), function(data) {
$('body').html(data);
});
}
ブラウザの履歴/戻るボタンとアドレスバーの更新を有効にするために、 history.jsも確認する必要があります。また、サーバー側で AJAX リクエストを検出して のみを返す<body>
か、そうでない場合はすべてを返し、上記の例を次のように変更する必要があります。$("html").html(data).
onLoad/DOM イベントを処理するか、新しい JQuery "On" Handler を使用する必要があります。$(document).on("click", "a", ajaxLinkHandler)
これにより、クリック イベントがドキュメントにバブルアップしたときに、アンカー タグから開始されたかどうかがチェックされるため、onReady イベントは必要ありません。
ブラウザーが DOM ガベージ コレクションを管理します。任意の JQuery ページを開き、firebug/chrome 開発ツールの [DOM] タブに移動して、ドキュメントを調べます。次に、コンソール タブに移動し、$("html").remove() と入力して DOM タブに戻ると、完全にクリーンアップされていることがわかります。remove() ではなく replace() を呼び出しているため、古い DOM 要素は AJAX 呼び出しからの新しい要素に置き換えられます。