Change active navbar link when using JQUERY Load
up vote
0
down vote
favorite
I have a navigation bar which is being loaded into each of my pages using a JQUERY '.load'
However, the active link will be different for each page. Is there a way i can override the active link from the page that has loaded the Navbar?
Any help would be much appreciated :)
Below is an example of the Navbar links
<nav class="navbar navbar-toggleable-sm">
<button type="button" data-toggle="collapse" data-target="#mai-navbar-collapse" aria-controls="#mai-navbar-collapse" aria-expanded="false" aria-label="Toggle navigation" class="navbar-toggler hidden-md-up collapsed">
<div class="icon-bar"><span></span><span></span><span></span></div>
</button>
<div id="mai-navbar-collapse" class="navbar-collapse collapse mai-nav-tabs">
<ul class="nav navbar-nav">
<li class="nav-item parent open"><a href="#" role="button" aria-expanded="true" class="nav-link"><span class="icon s7-home"></span><span>Training</span></a>
<ul class="mai-nav-tabs-sub mai-sub-nav nav">
<li class="nav-item"><a href="/teams/Training/sitepages/training/writtenguides.aspx" id="12222" class="nav-link active"><span class="icon s7-monitor"></span><span class="name">Written Guides</span></a></li>
<li class="nav-item"><a href="/teams/Training/sitepages/training/videoguides.aspx" class="nav-link"><span class="icon s7-video"></span><span class="name">Video Guides</span></a></li>
</ul>
</li>
<li class="nav-item parent"><a href="#" role="button" aria-expanded="false" class="nav-link"><span class="icon s7-users"></span><span>Support</span></a>
<ul class="mai-nav-tabs-sub mai-sub-nav nav">
<li class="nav-item"><a href="/teams/Training/sitepages/support/signup.aspx" class="nav-link"><span class="icon s7-id"></span><span class="name">Signing Up</span></a></li>
<li class="nav-item"><a href="/teams/Training/sitepages/support/faqs.aspx" class="nav-link"><span class="icon s7-search"></span><span class="name">FAQS</span></a></li>
</ul>
</li>
</ul>
</div>
</nav>
JQUERY
<script>
$(function(){
$("#nav-placeholder").load("../../navbarL1.aspx");
$('.dropdown-toggle').dropdown()
});
</script>
javascript jquery html twitter-bootstrap
add a comment |
up vote
0
down vote
favorite
I have a navigation bar which is being loaded into each of my pages using a JQUERY '.load'
However, the active link will be different for each page. Is there a way i can override the active link from the page that has loaded the Navbar?
Any help would be much appreciated :)
Below is an example of the Navbar links
<nav class="navbar navbar-toggleable-sm">
<button type="button" data-toggle="collapse" data-target="#mai-navbar-collapse" aria-controls="#mai-navbar-collapse" aria-expanded="false" aria-label="Toggle navigation" class="navbar-toggler hidden-md-up collapsed">
<div class="icon-bar"><span></span><span></span><span></span></div>
</button>
<div id="mai-navbar-collapse" class="navbar-collapse collapse mai-nav-tabs">
<ul class="nav navbar-nav">
<li class="nav-item parent open"><a href="#" role="button" aria-expanded="true" class="nav-link"><span class="icon s7-home"></span><span>Training</span></a>
<ul class="mai-nav-tabs-sub mai-sub-nav nav">
<li class="nav-item"><a href="/teams/Training/sitepages/training/writtenguides.aspx" id="12222" class="nav-link active"><span class="icon s7-monitor"></span><span class="name">Written Guides</span></a></li>
<li class="nav-item"><a href="/teams/Training/sitepages/training/videoguides.aspx" class="nav-link"><span class="icon s7-video"></span><span class="name">Video Guides</span></a></li>
</ul>
</li>
<li class="nav-item parent"><a href="#" role="button" aria-expanded="false" class="nav-link"><span class="icon s7-users"></span><span>Support</span></a>
<ul class="mai-nav-tabs-sub mai-sub-nav nav">
<li class="nav-item"><a href="/teams/Training/sitepages/support/signup.aspx" class="nav-link"><span class="icon s7-id"></span><span class="name">Signing Up</span></a></li>
<li class="nav-item"><a href="/teams/Training/sitepages/support/faqs.aspx" class="nav-link"><span class="icon s7-search"></span><span class="name">FAQS</span></a></li>
</ul>
</li>
</ul>
</div>
</nav>
JQUERY
<script>
$(function(){
$("#nav-placeholder").load("../../navbarL1.aspx");
$('.dropdown-toggle').dropdown()
});
</script>
javascript jquery html twitter-bootstrap
You can check the url where you are currently, and make it active depending on this(/faqs, /signup,..)..for example
– Albeis
Mar 5 at 14:45
Include the relevant jQuery code too.
– Zim
Mar 5 at 15:36
@ZimSystem code updated with JQUERY added
– Nick
Mar 5 at 16:15
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have a navigation bar which is being loaded into each of my pages using a JQUERY '.load'
However, the active link will be different for each page. Is there a way i can override the active link from the page that has loaded the Navbar?
Any help would be much appreciated :)
Below is an example of the Navbar links
<nav class="navbar navbar-toggleable-sm">
<button type="button" data-toggle="collapse" data-target="#mai-navbar-collapse" aria-controls="#mai-navbar-collapse" aria-expanded="false" aria-label="Toggle navigation" class="navbar-toggler hidden-md-up collapsed">
<div class="icon-bar"><span></span><span></span><span></span></div>
</button>
<div id="mai-navbar-collapse" class="navbar-collapse collapse mai-nav-tabs">
<ul class="nav navbar-nav">
<li class="nav-item parent open"><a href="#" role="button" aria-expanded="true" class="nav-link"><span class="icon s7-home"></span><span>Training</span></a>
<ul class="mai-nav-tabs-sub mai-sub-nav nav">
<li class="nav-item"><a href="/teams/Training/sitepages/training/writtenguides.aspx" id="12222" class="nav-link active"><span class="icon s7-monitor"></span><span class="name">Written Guides</span></a></li>
<li class="nav-item"><a href="/teams/Training/sitepages/training/videoguides.aspx" class="nav-link"><span class="icon s7-video"></span><span class="name">Video Guides</span></a></li>
</ul>
</li>
<li class="nav-item parent"><a href="#" role="button" aria-expanded="false" class="nav-link"><span class="icon s7-users"></span><span>Support</span></a>
<ul class="mai-nav-tabs-sub mai-sub-nav nav">
<li class="nav-item"><a href="/teams/Training/sitepages/support/signup.aspx" class="nav-link"><span class="icon s7-id"></span><span class="name">Signing Up</span></a></li>
<li class="nav-item"><a href="/teams/Training/sitepages/support/faqs.aspx" class="nav-link"><span class="icon s7-search"></span><span class="name">FAQS</span></a></li>
</ul>
</li>
</ul>
</div>
</nav>
JQUERY
<script>
$(function(){
$("#nav-placeholder").load("../../navbarL1.aspx");
$('.dropdown-toggle').dropdown()
});
</script>
javascript jquery html twitter-bootstrap
I have a navigation bar which is being loaded into each of my pages using a JQUERY '.load'
However, the active link will be different for each page. Is there a way i can override the active link from the page that has loaded the Navbar?
Any help would be much appreciated :)
Below is an example of the Navbar links
<nav class="navbar navbar-toggleable-sm">
<button type="button" data-toggle="collapse" data-target="#mai-navbar-collapse" aria-controls="#mai-navbar-collapse" aria-expanded="false" aria-label="Toggle navigation" class="navbar-toggler hidden-md-up collapsed">
<div class="icon-bar"><span></span><span></span><span></span></div>
</button>
<div id="mai-navbar-collapse" class="navbar-collapse collapse mai-nav-tabs">
<ul class="nav navbar-nav">
<li class="nav-item parent open"><a href="#" role="button" aria-expanded="true" class="nav-link"><span class="icon s7-home"></span><span>Training</span></a>
<ul class="mai-nav-tabs-sub mai-sub-nav nav">
<li class="nav-item"><a href="/teams/Training/sitepages/training/writtenguides.aspx" id="12222" class="nav-link active"><span class="icon s7-monitor"></span><span class="name">Written Guides</span></a></li>
<li class="nav-item"><a href="/teams/Training/sitepages/training/videoguides.aspx" class="nav-link"><span class="icon s7-video"></span><span class="name">Video Guides</span></a></li>
</ul>
</li>
<li class="nav-item parent"><a href="#" role="button" aria-expanded="false" class="nav-link"><span class="icon s7-users"></span><span>Support</span></a>
<ul class="mai-nav-tabs-sub mai-sub-nav nav">
<li class="nav-item"><a href="/teams/Training/sitepages/support/signup.aspx" class="nav-link"><span class="icon s7-id"></span><span class="name">Signing Up</span></a></li>
<li class="nav-item"><a href="/teams/Training/sitepages/support/faqs.aspx" class="nav-link"><span class="icon s7-search"></span><span class="name">FAQS</span></a></li>
</ul>
</li>
</ul>
</div>
</nav>
JQUERY
<script>
$(function(){
$("#nav-placeholder").load("../../navbarL1.aspx");
$('.dropdown-toggle').dropdown()
});
</script>
javascript jquery html twitter-bootstrap
javascript jquery html twitter-bootstrap
edited Mar 5 at 16:14
asked Mar 5 at 14:41
Nick
174
174
You can check the url where you are currently, and make it active depending on this(/faqs, /signup,..)..for example
– Albeis
Mar 5 at 14:45
Include the relevant jQuery code too.
– Zim
Mar 5 at 15:36
@ZimSystem code updated with JQUERY added
– Nick
Mar 5 at 16:15
add a comment |
You can check the url where you are currently, and make it active depending on this(/faqs, /signup,..)..for example
– Albeis
Mar 5 at 14:45
Include the relevant jQuery code too.
– Zim
Mar 5 at 15:36
@ZimSystem code updated with JQUERY added
– Nick
Mar 5 at 16:15
You can check the url where you are currently, and make it active depending on this(/faqs, /signup,..)..for example
– Albeis
Mar 5 at 14:45
You can check the url where you are currently, and make it active depending on this(/faqs, /signup,..)..for example
– Albeis
Mar 5 at 14:45
Include the relevant jQuery code too.
– Zim
Mar 5 at 15:36
Include the relevant jQuery code too.
– Zim
Mar 5 at 15:36
@ZimSystem code updated with JQUERY added
– Nick
Mar 5 at 16:15
@ZimSystem code updated with JQUERY added
– Nick
Mar 5 at 16:15
add a comment |
3 Answers
3
active
oldest
votes
up vote
0
down vote
Try to run this code. I hope it will work.
function getURL() {
// get the whole URL
var currentURL = window.location.href;
// get the file name after = sign
var activeTemplate = currentURL.substr(currentURL.indexOf("=") + 1);
// add active class to url
$('a[href="/teams/Training/sitepages/training/'+ activeTemplate +'"]').addClass('active');
})
add a comment |
up vote
0
down vote
You can use .toggleClass()
with a toggle state value as the second param. At that point it's a matter of figuring out how to compare the href
with the current URL. You can use location.pathname
, but you may want to get the href
using getAttribute
so it doesn't include the hostname. Otherwise you could also use this.href === location.href
. It is important, however, to include this code in a callback to .load()
so you don't encounter a race condition.
$(function(){
$("#nav-placeholder").load("../../navbarL1.aspx", function(){
$('.mai-sub-nav li a').each(function(){
$(this).toggleClass('active', this.getAttribute('href') === location.pathname);
})
});
$('.dropdown-toggle').dropdown()
});
add a comment |
up vote
0
down vote
You have to follow this kind of technique to achieve that
Here is my nav bar
<ul class="nav navbar-nav">
<li class="active" data-pos="1">
<a href="{{ route('public.site') }}">Home</a>
</li>
<li data-pos="2">
<a href="{{ route('site.page',['about']) }}">About Egypt</a>
</li>
<li data-pos="3">
<a href="{{ route('site.accomodation') }}">Accomodation</a>
</li>
<li data-pos="4">
<a href="{{ route('site.nile_curises') }}">Nile Cruises</a>
`enter code here`
</li>
<li data-pos="5">
<a href="{{ route('site.tour_packages') }}">Tour Packages</a>
</li>
<li class="dropdown" data-pos="6">
<a href="javascript:void(0)" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true">FAQ</span>
</a>
<ul class="dropdown-menu">
<li><a href="{{ route('site.page',['thing-to-do']) }}">Thing to do</a></li>
<li><a href="{{ route('site.page',['travel-tip']) }}">How to travel</a</li>
<li><a href="{{ route('site.page',['travel-help']) }}">Travel Help</a></li>
</ul>
</li>
</ul>
Here is my script logic in which i get full url and spilt on the base of '/' seprator
to get an array and check second last and last segment
var url = window.location.href;
var urlArray = url.split("/");
var lastUrlString = urlArray[urlArray.length-1];
var pageName = urlArray[urlArray.length-2];
After getting last and second last segment i loop through navbar li elements and add or remove class on the basis of page names
var navLinks = $('ul.nav li');
navLinks.each(function(index,element){
var position = $(element).data('pos');
if(lastUrlString == 'home')
{
if($(element).data("pos") == 1)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'about')
{
if($(element).data("pos") == 2)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'page' && pageName == 'accomodation')
{
if($(element).data("pos") == 3)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'page' && pageName == 'nile_curises')
{
if($(element).data("pos") == 4)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'page' && pageName == 'tour_packages')
{
if($(element).data("pos") == 5)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else
{
$(element).removeClass("active");
}
});
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f49112950%2fchange-active-navbar-link-when-using-jquery-load%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
Try to run this code. I hope it will work.
function getURL() {
// get the whole URL
var currentURL = window.location.href;
// get the file name after = sign
var activeTemplate = currentURL.substr(currentURL.indexOf("=") + 1);
// add active class to url
$('a[href="/teams/Training/sitepages/training/'+ activeTemplate +'"]').addClass('active');
})
add a comment |
up vote
0
down vote
Try to run this code. I hope it will work.
function getURL() {
// get the whole URL
var currentURL = window.location.href;
// get the file name after = sign
var activeTemplate = currentURL.substr(currentURL.indexOf("=") + 1);
// add active class to url
$('a[href="/teams/Training/sitepages/training/'+ activeTemplate +'"]').addClass('active');
})
add a comment |
up vote
0
down vote
up vote
0
down vote
Try to run this code. I hope it will work.
function getURL() {
// get the whole URL
var currentURL = window.location.href;
// get the file name after = sign
var activeTemplate = currentURL.substr(currentURL.indexOf("=") + 1);
// add active class to url
$('a[href="/teams/Training/sitepages/training/'+ activeTemplate +'"]').addClass('active');
})
Try to run this code. I hope it will work.
function getURL() {
// get the whole URL
var currentURL = window.location.href;
// get the file name after = sign
var activeTemplate = currentURL.substr(currentURL.indexOf("=") + 1);
// add active class to url
$('a[href="/teams/Training/sitepages/training/'+ activeTemplate +'"]').addClass('active');
})
function getURL() {
// get the whole URL
var currentURL = window.location.href;
// get the file name after = sign
var activeTemplate = currentURL.substr(currentURL.indexOf("=") + 1);
// add active class to url
$('a[href="/teams/Training/sitepages/training/'+ activeTemplate +'"]').addClass('active');
})
function getURL() {
// get the whole URL
var currentURL = window.location.href;
// get the file name after = sign
var activeTemplate = currentURL.substr(currentURL.indexOf("=") + 1);
// add active class to url
$('a[href="/teams/Training/sitepages/training/'+ activeTemplate +'"]').addClass('active');
})
answered Mar 5 at 16:25
Sodhi saab
1,49611022
1,49611022
add a comment |
add a comment |
up vote
0
down vote
You can use .toggleClass()
with a toggle state value as the second param. At that point it's a matter of figuring out how to compare the href
with the current URL. You can use location.pathname
, but you may want to get the href
using getAttribute
so it doesn't include the hostname. Otherwise you could also use this.href === location.href
. It is important, however, to include this code in a callback to .load()
so you don't encounter a race condition.
$(function(){
$("#nav-placeholder").load("../../navbarL1.aspx", function(){
$('.mai-sub-nav li a').each(function(){
$(this).toggleClass('active', this.getAttribute('href') === location.pathname);
})
});
$('.dropdown-toggle').dropdown()
});
add a comment |
up vote
0
down vote
You can use .toggleClass()
with a toggle state value as the second param. At that point it's a matter of figuring out how to compare the href
with the current URL. You can use location.pathname
, but you may want to get the href
using getAttribute
so it doesn't include the hostname. Otherwise you could also use this.href === location.href
. It is important, however, to include this code in a callback to .load()
so you don't encounter a race condition.
$(function(){
$("#nav-placeholder").load("../../navbarL1.aspx", function(){
$('.mai-sub-nav li a').each(function(){
$(this).toggleClass('active', this.getAttribute('href') === location.pathname);
})
});
$('.dropdown-toggle').dropdown()
});
add a comment |
up vote
0
down vote
up vote
0
down vote
You can use .toggleClass()
with a toggle state value as the second param. At that point it's a matter of figuring out how to compare the href
with the current URL. You can use location.pathname
, but you may want to get the href
using getAttribute
so it doesn't include the hostname. Otherwise you could also use this.href === location.href
. It is important, however, to include this code in a callback to .load()
so you don't encounter a race condition.
$(function(){
$("#nav-placeholder").load("../../navbarL1.aspx", function(){
$('.mai-sub-nav li a').each(function(){
$(this).toggleClass('active', this.getAttribute('href') === location.pathname);
})
});
$('.dropdown-toggle').dropdown()
});
You can use .toggleClass()
with a toggle state value as the second param. At that point it's a matter of figuring out how to compare the href
with the current URL. You can use location.pathname
, but you may want to get the href
using getAttribute
so it doesn't include the hostname. Otherwise you could also use this.href === location.href
. It is important, however, to include this code in a callback to .load()
so you don't encounter a race condition.
$(function(){
$("#nav-placeholder").load("../../navbarL1.aspx", function(){
$('.mai-sub-nav li a').each(function(){
$(this).toggleClass('active', this.getAttribute('href') === location.pathname);
})
});
$('.dropdown-toggle').dropdown()
});
answered Mar 5 at 16:30
Joseph Marikle
56.7k1286116
56.7k1286116
add a comment |
add a comment |
up vote
0
down vote
You have to follow this kind of technique to achieve that
Here is my nav bar
<ul class="nav navbar-nav">
<li class="active" data-pos="1">
<a href="{{ route('public.site') }}">Home</a>
</li>
<li data-pos="2">
<a href="{{ route('site.page',['about']) }}">About Egypt</a>
</li>
<li data-pos="3">
<a href="{{ route('site.accomodation') }}">Accomodation</a>
</li>
<li data-pos="4">
<a href="{{ route('site.nile_curises') }}">Nile Cruises</a>
`enter code here`
</li>
<li data-pos="5">
<a href="{{ route('site.tour_packages') }}">Tour Packages</a>
</li>
<li class="dropdown" data-pos="6">
<a href="javascript:void(0)" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true">FAQ</span>
</a>
<ul class="dropdown-menu">
<li><a href="{{ route('site.page',['thing-to-do']) }}">Thing to do</a></li>
<li><a href="{{ route('site.page',['travel-tip']) }}">How to travel</a</li>
<li><a href="{{ route('site.page',['travel-help']) }}">Travel Help</a></li>
</ul>
</li>
</ul>
Here is my script logic in which i get full url and spilt on the base of '/' seprator
to get an array and check second last and last segment
var url = window.location.href;
var urlArray = url.split("/");
var lastUrlString = urlArray[urlArray.length-1];
var pageName = urlArray[urlArray.length-2];
After getting last and second last segment i loop through navbar li elements and add or remove class on the basis of page names
var navLinks = $('ul.nav li');
navLinks.each(function(index,element){
var position = $(element).data('pos');
if(lastUrlString == 'home')
{
if($(element).data("pos") == 1)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'about')
{
if($(element).data("pos") == 2)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'page' && pageName == 'accomodation')
{
if($(element).data("pos") == 3)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'page' && pageName == 'nile_curises')
{
if($(element).data("pos") == 4)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'page' && pageName == 'tour_packages')
{
if($(element).data("pos") == 5)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else
{
$(element).removeClass("active");
}
});
add a comment |
up vote
0
down vote
You have to follow this kind of technique to achieve that
Here is my nav bar
<ul class="nav navbar-nav">
<li class="active" data-pos="1">
<a href="{{ route('public.site') }}">Home</a>
</li>
<li data-pos="2">
<a href="{{ route('site.page',['about']) }}">About Egypt</a>
</li>
<li data-pos="3">
<a href="{{ route('site.accomodation') }}">Accomodation</a>
</li>
<li data-pos="4">
<a href="{{ route('site.nile_curises') }}">Nile Cruises</a>
`enter code here`
</li>
<li data-pos="5">
<a href="{{ route('site.tour_packages') }}">Tour Packages</a>
</li>
<li class="dropdown" data-pos="6">
<a href="javascript:void(0)" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true">FAQ</span>
</a>
<ul class="dropdown-menu">
<li><a href="{{ route('site.page',['thing-to-do']) }}">Thing to do</a></li>
<li><a href="{{ route('site.page',['travel-tip']) }}">How to travel</a</li>
<li><a href="{{ route('site.page',['travel-help']) }}">Travel Help</a></li>
</ul>
</li>
</ul>
Here is my script logic in which i get full url and spilt on the base of '/' seprator
to get an array and check second last and last segment
var url = window.location.href;
var urlArray = url.split("/");
var lastUrlString = urlArray[urlArray.length-1];
var pageName = urlArray[urlArray.length-2];
After getting last and second last segment i loop through navbar li elements and add or remove class on the basis of page names
var navLinks = $('ul.nav li');
navLinks.each(function(index,element){
var position = $(element).data('pos');
if(lastUrlString == 'home')
{
if($(element).data("pos") == 1)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'about')
{
if($(element).data("pos") == 2)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'page' && pageName == 'accomodation')
{
if($(element).data("pos") == 3)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'page' && pageName == 'nile_curises')
{
if($(element).data("pos") == 4)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'page' && pageName == 'tour_packages')
{
if($(element).data("pos") == 5)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else
{
$(element).removeClass("active");
}
});
add a comment |
up vote
0
down vote
up vote
0
down vote
You have to follow this kind of technique to achieve that
Here is my nav bar
<ul class="nav navbar-nav">
<li class="active" data-pos="1">
<a href="{{ route('public.site') }}">Home</a>
</li>
<li data-pos="2">
<a href="{{ route('site.page',['about']) }}">About Egypt</a>
</li>
<li data-pos="3">
<a href="{{ route('site.accomodation') }}">Accomodation</a>
</li>
<li data-pos="4">
<a href="{{ route('site.nile_curises') }}">Nile Cruises</a>
`enter code here`
</li>
<li data-pos="5">
<a href="{{ route('site.tour_packages') }}">Tour Packages</a>
</li>
<li class="dropdown" data-pos="6">
<a href="javascript:void(0)" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true">FAQ</span>
</a>
<ul class="dropdown-menu">
<li><a href="{{ route('site.page',['thing-to-do']) }}">Thing to do</a></li>
<li><a href="{{ route('site.page',['travel-tip']) }}">How to travel</a</li>
<li><a href="{{ route('site.page',['travel-help']) }}">Travel Help</a></li>
</ul>
</li>
</ul>
Here is my script logic in which i get full url and spilt on the base of '/' seprator
to get an array and check second last and last segment
var url = window.location.href;
var urlArray = url.split("/");
var lastUrlString = urlArray[urlArray.length-1];
var pageName = urlArray[urlArray.length-2];
After getting last and second last segment i loop through navbar li elements and add or remove class on the basis of page names
var navLinks = $('ul.nav li');
navLinks.each(function(index,element){
var position = $(element).data('pos');
if(lastUrlString == 'home')
{
if($(element).data("pos") == 1)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'about')
{
if($(element).data("pos") == 2)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'page' && pageName == 'accomodation')
{
if($(element).data("pos") == 3)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'page' && pageName == 'nile_curises')
{
if($(element).data("pos") == 4)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'page' && pageName == 'tour_packages')
{
if($(element).data("pos") == 5)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else
{
$(element).removeClass("active");
}
});
You have to follow this kind of technique to achieve that
Here is my nav bar
<ul class="nav navbar-nav">
<li class="active" data-pos="1">
<a href="{{ route('public.site') }}">Home</a>
</li>
<li data-pos="2">
<a href="{{ route('site.page',['about']) }}">About Egypt</a>
</li>
<li data-pos="3">
<a href="{{ route('site.accomodation') }}">Accomodation</a>
</li>
<li data-pos="4">
<a href="{{ route('site.nile_curises') }}">Nile Cruises</a>
`enter code here`
</li>
<li data-pos="5">
<a href="{{ route('site.tour_packages') }}">Tour Packages</a>
</li>
<li class="dropdown" data-pos="6">
<a href="javascript:void(0)" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true">FAQ</span>
</a>
<ul class="dropdown-menu">
<li><a href="{{ route('site.page',['thing-to-do']) }}">Thing to do</a></li>
<li><a href="{{ route('site.page',['travel-tip']) }}">How to travel</a</li>
<li><a href="{{ route('site.page',['travel-help']) }}">Travel Help</a></li>
</ul>
</li>
</ul>
Here is my script logic in which i get full url and spilt on the base of '/' seprator
to get an array and check second last and last segment
var url = window.location.href;
var urlArray = url.split("/");
var lastUrlString = urlArray[urlArray.length-1];
var pageName = urlArray[urlArray.length-2];
After getting last and second last segment i loop through navbar li elements and add or remove class on the basis of page names
var navLinks = $('ul.nav li');
navLinks.each(function(index,element){
var position = $(element).data('pos');
if(lastUrlString == 'home')
{
if($(element).data("pos") == 1)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'about')
{
if($(element).data("pos") == 2)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'page' && pageName == 'accomodation')
{
if($(element).data("pos") == 3)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'page' && pageName == 'nile_curises')
{
if($(element).data("pos") == 4)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else if(lastUrlString == 'page' && pageName == 'tour_packages')
{
if($(element).data("pos") == 5)
{
if(!$(element).hasClass("active") )
{
$(element).addClass('active');
}
}
else
{
$(element).removeClass("active");
}
}
else
{
$(element).removeClass("active");
}
});
answered Nov 12 at 7:51
Syed Nazir Hussain
10817
10817
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f49112950%2fchange-active-navbar-link-when-using-jquery-load%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
You can check the url where you are currently, and make it active depending on this(/faqs, /signup,..)..for example
– Albeis
Mar 5 at 14:45
Include the relevant jQuery code too.
– Zim
Mar 5 at 15:36
@ZimSystem code updated with JQUERY added
– Nick
Mar 5 at 16:15