Прямо сейчас, вы используете функцию, чтобы показать и скрыть DIVs, которые определены при настройке слушателя событий. Однако то, что вы хотите сделать, в основном имеет тот же эффект, который назначает (например, по имени) раздел, который вы хотите показать или скрыть.
Один из способов сделать это - создать функцию, в которой вы можете предоставить префикс идентификатора, и он будет скрывать и показывать соответствующие части страницы. В основном это происходит из вашего существующего обработчика «menu-clicker».
function switchToDiv(idprefix) {
var navItem = $('#' + idprefix + '-link'),
pageDiv = $('#' + idprefix + '-page');
if (!(navItem.hasClass('active'))) {
//hide other pages and show the linked one
$("div[id*='-page']").hide();
pageDiv.show();
//set all links inactive and the clicked on active
$("li[id*='-link']").removeClass("active");
navItem.addClass("active");
}
}
Вторая часть - это то, как вы запускаете эту функцию. В вашем коде есть набор операторов «if» в анонимной функции, называемой $ (документ) .ready. Во-первых, потому что вы в основном выполняете набор сравнений строк, оператор switch лучше подходит. Кроме того, поскольку вы можете использовать функцию в другое время, вероятно, стоит указать ей имя.
function loadPageFromHash() {
switch (window.location.hash) {
case '#lgc':
switchToDiv('lgcweather');
break;
case '#rasp':
switchToDiv('rasp');
break;
case '#charts':
switchToDiv('charts');
break;
case '#dunstablepara':
switchToDiv('dunstablepara');
break;
case '#webcams':
switchToDiv('webcam');
break;
default:
// do anything you need to in order to load the home page
}
}
Наконец, вы можете вызвать эту функцию при загрузке страницы, и когда хэш изменения URL, если это желательно.
//shows page depending on url
$(document).ready(loadPageFromHash);
$(window).on('hashchange',loadPageFromHash);
Альтернатива высказывания «переключатель», чтобы использовать словарь для отображения URL # текста в «префикс», например:
function loadPageFromHash() {
var mappings = {
'#lgc': 'lgcweather',
'#rasp': 'rasp',
'#charts':'charts',
'#dunstablepara':'dunstablepara',
'#webcams':'webcam'
}
if (window.location.hash in mappings) {
switchToDiv(mappings[window.location.hash]);
} else {
//special case for home
}
}
Имейте в виде, что с функцией написано как и выше, словарь сопоставлений создается каждый раз. Это, безусловно, будет менее эффективным, чем оператор switch, хотя, возможно, более аккуратный.
Location.href не является проблемой здесь. Я хочу, чтобы он показывал только определенный div в зависимости от того, какой хэш находится в URL-адресе. – winseybash
Я вроде бы неправильно понял вопрос, и, честно говоря, я даже подумал, что «location.href» исключил хэш из URL-адреса. Независимо от того, правильный подход в этом случае будет состоять в том, чтобы вместо этого использовать 'location.hash' (поскольку это действительно единственное, что вы проверяете). Таким образом, вы также можете удалить .indexOf(). – Leakim