I've finally pieced together some code that works for my question here. However, it appears pretty long as I've created separate functions for when a page with a certain hash is refreshed and when that same page is accessed via clicking the tabs.
$(document).ready(function () {
$(function () {
var loc = window.location.href; // For when Hazel is refreshed
if (/Hazel/.test(loc)) {
$("#tab1,#tab2,#tab3,#tab4").removeClass("r p c").addClass("h");
$("#tab2").removeClass("tail");
$("#tab3, #tab4").addClass("tail");
}
});
$(function () {
var loc = window.location.href; // For when Red is refreshed
if (/Red/.test(loc)) {
$("#tab1,#tab2,#tab3,#tab4").removeClass("h p c").addClass("r");
$("#tab3, #tab2").removeClass("tail");
$("#tab4").addClass("tail");
}
});
$(function () {
var loc = window.location.href; // For when Pink is refreshed
if (/Pink/.test(loc)) {
$("#tab1,#tab2,#tab3,#tab4").removeClass("h r c").addClass("p");
$("#tab3, #tab4").removeClass("tail");
$("#tab2").addClass("tail");
}
});
});
$(function () {
var loc = window.location.href; // For when Cyan is refreshed
if (/Cyan/.test(loc)) {
$("#tab1,#tab2,#tab3,#tab4").removeClass("h r p").addClass("c");
$("#tab4").removeClass("tail");
$("#tab3, #tab2").addClass("tail");
}
});
$("#tab1").click(function () {
$(window).bind("hashchange", function () {
var loc = window.location.href; // For when Hazel tab is clicked
if (/Hazel/.test(loc)) {
$("#tab1,#tab2,#tab3,#tab4").removeClass("r p c").addClass("h");
$("#tab2").removeClass("tail");
$("#tab3, #tab4").addClass("tail");
}
});
});
$("#tab2").click(function () {
$(window).bind("hashchange", function () {
var loc = window.location.href; // For when Red tab is clicked
if (/Red/.test(loc)) {
$("#tab1,#tab2,#tab3,#tab4").removeClass("h p c").addClass("r");
$("#tab3, #tab2").removeClass("tail");
$("#tab4").addClass("tail");
}
});
});
$("#tab3").click(function () {
$(window).bind("hashchange", function () {
var loc = window.location.href; // For when Pink tab is clicked
if (/Pink/.test(loc)) {
$("#tab1,#tab2,#tab3,#tab4").removeClass("h r c").addClass("p");
$("#tab3, #tab4").removeClass("tail");
$("#tab2").addClass("tail");
}
});
});
$("#tab4").click(function () {
$(window).bind("hashchange", function () {
var loc = window.location.href; // For when Cyan tab is clicked
if (/Cyan/.test(loc)) {
$("#tab1,#tab2,#tab3,#tab4").removeClass("h r p").addClass("c");
$("#tab4").removeClass("tail");
$("#tab3, #tab2").addClass("tail");
}
});
});
});
Is it possible to simplify it? I've tried but in my attempts so far, the code just breaks.
I'm assuming that you're using some kind of a JS routing library.
Try this:
$(document).ready(function () {
var tabInfo = {
Hazel: {nonTail:'#tab2',tail:'#tab3, #tab4'},
Red: {nonTail:'#tab3,#tab2',tail:'#tab4'},
Pink: {nonTail:'#tab3,#tab4',tail:'#tab2'},
Cyan: {nonTail:'#tab4',tail:'#tab2,#tab3'}
};
function makeChanges() {
var loc = window.location.href;
for(var tab in tabInfo){
if(loc.indexOf(tab) !== -1){
$("#tab1,#tab2,#tab3,#tab4").removeClass("h r p c").addClass(tab.toLowerCase().charAt(0));
$(tabInfo[tab].nonTail).removeClass("tail");
$(tabInfo[tab].tail).addClass("tail");
break;
}
}
}
makeChanges();
$(window).bind("hashchange", function () {
makeChanges();
});
});