Reputation: 2341
I am using font awesome 'plus' icon on expandable categories list items. When they are in expanded state i want to show a 'minus' sign'
HTML
<ul id="category-tabs">
<li><a href="javascript:void"><i class="fa fa-fw"></i>Category 1</a>
<ul>
<li><a href="javascript:void">item 1</a></li>
<li><a href="javascript:void">item 2</a></li>
<li><a href="javascript:void">item 3</a></li>
</ul>
</li>
</ul>
Jquery
$('#category-tabs li a').click(function(){
$(this).next('ul').slideToggle('500');
});
Upvotes: 41
Views: 139859
Reputation: 388316
You can toggle the class of the i
element within the clicked anchor like
<i class="fa fa-plus-circle"></i>
then
$('#category-tabs li a').click(function(){
$(this).next('ul').slideToggle('500');
$(this).find('i').toggleClass('fa-plus-circle fa-minus-circle')
});
See working example:
$('#category-tabs li a').click(function() {
$(this).next('ul').slideToggle('500');
$(this).find('i').toggleClass('fa-plus-circle fa-minus-circle')
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<ul id="category-tabs">
<li>
<a href="javascript:void">
<i class="fa fa-plus-circle"></i> Category 1
</a>
<ul>
<li><a href="javascript:void">item 1</a></li>
<li><a href="javascript:void">item 2</a></li>
<li><a href="javascript:void">item 3</a></li>
</ul>
</li>
</ul>
Upvotes: 92
Reputation: 583
<ul id="category-tabs">
<li><a href="javascript:void"><i class="fa fa-plus-circle"></i>Category 1</a>
<ul>
<li><a href="javascript:void">item 1</a></li>
<li><a href="javascript:void">item 2</a></li>
<li><a href="javascript:void">item 3</a></li>
</ul>
</li> </ul>
//Jquery
$(document).ready(function() {
$('li').click(function() {
$('i').toggleClass('fa-plus-square fa-minus-square');
});
});
Upvotes: -1
Reputation: 2152
Generally and simply it works like this:
<script>
$(document).ready(function () {
$('i').click(function () {
$(this).toggleClass('fa-plus-square fa-minus-square');
});
});
</script>
Upvotes: 2
Reputation: 290
There is another solution you can try by using only the css here is the answer i posted in another post: jQuery Accordion change font awesome icon class on click
Upvotes: 0
Reputation: 30993
You can change the code by using class definition for the i
element:
<a href="javascript:void"><i class="fa fa-plus-circle"></i>Category 1</a>
Then you can switch the classes rapresenting the plus/minus state using toggleClass
with multiple classes:
$('#category-tabs li a').click(function(){
$(this).next('ul').slideToggle('500');
$(this).find('i').toggleClass('fa-plus-circle fa-minus-circle');
});
Demo: http://jsfiddle.net/Zcn2u/
Upvotes: 2
Reputation: 128781
Simply call jQuery's toggleClass()
on the i
element contained within your a
element(s) to toggle either the plus and minus icons:
...click(function() {
$(this).find('i').toggleClass('fa-minus-circle fa-plus-circle');
});
Note that this assumes that a class of fa-plus-circle
is added to your i
element by default.
Upvotes: 17