Reputation: 2126
I'm a bit of a beginner at jQuery, and this one really has me stumped. I am working with legacy PHP smarty templates so the html that I use has to follow this format:
<div class="container">
<div class="block">
<div class="header">
</div>
<p class="exampleP p1"></p>
<p class="exampleP p2"></p>
<p class="exampleP p3"></p>
<p class="exampleP p4"></p>
<p class="exampleP p5"></p>
<p class="exampleP p6"></p>
<div class="exampleClass div1">1</div>
<div class="exampleClass div2">2</div>
</div>
<div class="block">
<div class="header">
</div>
<p class="exampleP p1"></p>
<p class="exampleP p2"></p>
<p class="exampleP p3"></p>
<p class="exampleP p4"></p>
<p class="exampleP p5"></p>
<p class="exampleP p6"></p>
<div class="exampleClass div3">3</div>
</div>
<div class="block">
<div class="header">
</div>
<p class="exampleP p1"></p>
<p class="exampleP p2"></p>
<p class="exampleP p3"></p>
<p class="exampleP p4"></p>
<p class="exampleP p5"></p>
<p class="exampleP p6"></p>
<div class="exampleClass div4">4</div>
</div>
<div class="block">
<div class="header">
</div>
<p class="exampleP p1"></p>
<p class="exampleP p2"></p>
<p class="exampleP p3"></p>
<p class="exampleP p4"></p>
<p class="exampleP p5"></p>
<p class="exampleP p6"></p>
<div class="exampleClass div5">5</div>
<div class="exampleClass div6">6</div>
</div>
What I would like to happen, is that when I click on one of the divs with the "exampleClass" class, all of the corresponding p elements receive a class of active.
For example, I click the 3rd "exampleClass" div: <div class="exampleClass div3">3</div>
. The active class is removed from all p elements, and all of the p elements labeled <p class="exampleP p3"></p>
get the 'active' class.
This is the jQuery code I have at the moment:
jQuery('.exampleClass').click(function(){
jQuery('p').removeClass("active");
var indexNumber = jQuery(this).index('.exampleClass');
jQuery('p').eq(indexNumber).addClass("active");
});
This works for only the child p elements of the first div with a 'block' class. I need it to work for all child p elements in all of the divs with a "block" class. I think I'm close but I seem to have tried it so many different ways with no luck.
Any help would be greatly appreciated.
Thanks
Upvotes: 1
Views: 125
Reputation: 28445
You can do something like following
jQuery('.exampleClass').click(function(){
jQuery('.exampleP').removeClass("active"); // remove active class
var elClasses = jQuery(this).attr("class").split(' '); // get the classes of clicked div
for (var i = 0; i < elClasses.length; i++) { // iterate over classes
if(elClasses[i].indexOf("div") === 0) { // get the class which starts with div
jQuery(".p" + elClasses[i].substring(3)).addClass("active"); // add active class to corresponding p elements
break;
}
}
});
For reference - http://plnkr.co/edit/IfbK3dpE38lOQ3XYT90y?p=preview
Upvotes: 0
Reputation: 1403
keep it simple... here is a solution:
$(function(){
$('p').click(function(){
$('p').removeClass('active');
$(this).addClass('active');
});
});
You can test it here: http://jsfiddle.net/leojavier/wyqrvsje/
Upvotes: -1
Reputation: 25527
You need to loop through the block
elements
jQuery('.exampleClass').click(function(){
jQuery('p').removeClass("active");
var indexNumber = jQuery(this).index('.exampleClass');
jQuery('.block').each(function(){
jQuery(this).find("p").eq(indexNumber).addClass("active");
});
});
Upvotes: 1
Reputation: 167162
Just replace the following code:
jQuery('p').eq(indexNumber).addClass("active");
With:
var indexNumber = jQuery(this).html();
jQuery('p.p' + indexNumber).addClass("active");
Snippet
jQuery('.exampleClass').click(function(){
jQuery('p').removeClass("active");
var indexNumber = jQuery(this).html();
jQuery('p.p' + indexNumber).addClass("active");
});
.active {color: blue; background-color: blue;}
<script src="https://code.jquery.com/jquery-1.9.1.js"></script>
<div class="container">
<div class="block">
<div class="header">
</div>
<p class="exampleP p1"></p>
<p class="exampleP p2"></p>
<p class="exampleP p3"></p>
<p class="exampleP p4"></p>
<p class="exampleP p5"></p>
<p class="exampleP p6"></p>
<div class="exampleClass div1">1</div>
<div class="exampleClass div2">2</div>
</div>
<div class="block">
<div class="header">
</div>
<p class="exampleP p1"></p>
<p class="exampleP p2"></p>
<p class="exampleP p3"></p>
<p class="exampleP p4"></p>
<p class="exampleP p5"></p>
<p class="exampleP p6"></p>
<div class="exampleClass div3">3</div>
</div>
<div class="block">
<div class="header">
</div>
<p class="exampleP p1"></p>
<p class="exampleP p2"></p>
<p class="exampleP p3"></p>
<p class="exampleP p4"></p>
<p class="exampleP p5"></p>
<p class="exampleP p6"></p>
<div class="exampleClass div4">4</div>
</div>
<div class="block">
<div class="header">
</div>
<p class="exampleP p1"></p>
<p class="exampleP p2"></p>
<p class="exampleP p3"></p>
<p class="exampleP p4"></p>
<p class="exampleP p5"></p>
<p class="exampleP p6"></p>
<div class="exampleClass div5">5</div>
<div class="exampleClass div6">6</div>
</div>
</div>
Upvotes: 1
Reputation: 3064
.exampleP
of parentaddClass()
$('.exampleClass').click(function(){
$('p').removeClass('active';)
$(this).parents('.block').find('.exampleP').each(function(){
$(this).addClass('active');
})
})
Upvotes: 0