各ページを ajax 経由でロードし、フォールバックするメインのサイト ナビゲーションにこのコードを使用しています。
$(function() {
var newHash = '',
$contentWrap = $("#content-wrap");
$("nav").on("click", "a", function() {
window.location.hash = $(this).attr("href");
return false;
});
$(window).on('hashchange', function() {
newHash = window.location.hash.substring(1);
$contentWrap.load(newHash + " #content");
});
$(window).trigger('hashchange');
});
これは正常に動作しますが、別のページ (たとえば about.html) からコンテンツを読み込むと、#content-wrap 内のナビゲーション用のボタンもいくつか読み込まれます。
そのため、#content-wrap にはデータ ボックスとナビゲーション用のボタンが追加されました。新しいナビゲーションをクリックすると、データ ボックスに新しいデータをロードする必要があります。
最初に、上記のスクリプトをほとんどコピーしようとしましたが、新しいアンカーを使用すると競合が発生します。
ある種の if ステートメントが必要だと思います。 if (function !== undefined) のようなものを調べましたが、何をすべきかわかりません。
私はそれを説明するのに混乱していますが、基本的には上記のコードを基本的に以下の同じコードと矛盾なく組み合わせたいと思っています。
$(function() {
var newHash = '',
$contentWrap = $("#content-wrap"),
$aboutWrap = $("#a-wrap");
$("#content-wrap").on("click", "a", function() {
window.location.hash = $(this).attr("href");
return false;
});
$(window).on('hashchange', function() {
newHash = window.location.hash.substring(1);
$aboutWrap.load(newHash + " #a-content");
});
$(window).trigger('hashchange');
});
更新:ちょっとうまくいきましたが、私の計画を変更しました
$(function() {
var newHash = '',
$nav = $("nav a"),
$boxBtn = '',
$aboutWrap = '',
$contentWrap = $("#content-wrap");
$("nav").on("click", "a", function() {
$(this).addClass("nav-click");
window.location.hash = $(this).attr("href");
return false;
});
$contentWrap.on("click", "a", function() {
$(this).addClass("btn-click");
window.location.hash = $(this).attr("href");
return false;
});
$(window).on('hashchange', function() {
var $aboutWrap = $("#a-wrap"),
$boxBtn = $("div.btn a");
newHash = window.location.hash.substring(1);
if ($nav.hasClass("nav-click")){
$contentWrap.load(newHash + " #content");
$nav.removeClass("nav-click");
};
if ($boxBtn.hasClass("btn-click")){
$aboutWrap.load(newHash + " #a-content");
$boxBtn.removeClass("btn-click");
};
});
$(window).trigger('hashchange');
}); /*/end*/