I have been looking for tutorials on how to add and remove a class from a link unfortunately without any success. All the earlier questions on this have give me some understanding, but haven't give me the result I want to accomplish.
I'm trying to have an active state for my navigation, by adding and removing a class when the link is clicked.
Here is what I have as far as JavaScript:
$(document).ready(function(){
//active state
$(function() {
$('li a').click(function(e) {
e.preventDefault();
var $this = $(this);
$this.closest('li').children('a').removeClass('active');
$this.parent().addClass('active');
});
});
});
And this is my navigation:
<div id="nav">
<div id="main-nav" class="center">
<ul>
<li><a href="/photography.php">Photography</a></li>
<li><a href="/web.php">Web</a></li>
<li><a href="/print.php">Print</a></li>
<li class="nav-R"><a href="/about.php">About</a></li>
<li class="nav-R"><a href="/contact.php">Contact</a></li>
</ul>
</div><!-- close center -->
</div><!-- close-nav -->
ADHD is the official, medical term for the condition — regardless of whether a patient demonstrates symptoms of hyperactivity. ADD is a now-outdated term that is typically used to describe inattentive-type ADHD, which has symptoms including disorganization, lack of focus, and forgetfulness.
ADHD, also called attention-deficit disorder, is a behavior disorder, usually first diagnosed in childhood, that is characterized by inattention, impulsivity, and, in some cases, hyperactivity.
Attention-deficit/hyperactivity disorder (ADHD) is one of the most common mental disorders affecting children. Symptoms of ADHD include inattention (not being able to keep focus), hyperactivity (excess movement that is not fitting to the setting) and impulsivity (hasty acts that occur in the moment without thought).
You're removing the 'active' class from the closest li
's child element, and then you're adding the active class to the current a
's parent li
. In the spirit of keeping the active class on the anchors and not the list items, this will work for you:
$('li a').click(function(e) {
e.preventDefault();
$('a').removeClass('active');
$(this).addClass('active');
});
The active link is the active link. There'd never be more than one link active at any given time, so there's no reason to be all specific about removing the active
class. Just remove from all anchors.
Demo: http://jsfiddle.net/rq9UB/
Try:
$(function() {
$('li a').click(function(e) {
e.preventDefault();
var $this = $(this);
$this.closest('ul').find('.active').removeClass('active');
$this.parent().addClass('active');
});
});
Your selector was looking at the parent element of the current ($(this)
) a
element, and then looking among the children of that element for an a
. The only a
in that element is the one you just clicked.
My solution instead moves up to the closest ul
and then finds the element that currently has the class of
active` and then removes that class.
Also your approach, as posted, was adding the active
class-name to the li
element, and you were looking to remove the class-name from an a
element. My approach uses the li
, but that can be amended to use the a
by simply removing the parent()
from the final line.
References:
children()
.closest()
.find()
.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With