Reputation: 9
How do you add a class to parents only if two separate child divs are present?
The code here works if the two classes are present in a child
$('.class1.class2').parents().addClass('newclass');
<div class="parentdiv">
<div class="class1 class2">
</div>
I am trying to add class to parentdiv only if class1 and class2 are children
<div class="parentdiv">
<div class="class1">
</div>
<div class="someother">
</div>
<div class="class2">
</div>
Upvotes: 1
Views: 35
Reputation: 36609
Use
.filter
to select only those elements which satisfy condition provided incallback
var filtered = $('.parentdiv').filter(function() {
return $(this).find('.class1').length > 0 && $(this).find('.class2').length > 0;
});
filtered.addClass('newclass')
.newclass {
border: 2px black dotted;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div class="parentdiv">
<div class="class1">
Hello class1
</div>
<div class="someother">
</div>
<div class="class2">
Hello class2
</div>
</div>
Upvotes: 0
Reputation: 1
You can use :has()
with selector .class1 ~ .class2, .class2 ~ .class 1
to select .parentdiv
element where .class1
or .class2
is child element is a general sibling of .class2
or .class1
respectively. If requirement is to select .parentdiv
only if .class1
is followed by .class2
you can use selector .class1 ~ .class2
$(".parentdiv:has(.class1 ~ .class2, .class2 ~ .class 1)")
.addClass("selected");
.selected {
color:olive;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="parentdiv">
<div class="class1">class1
</div>
<div class="someother">smoother
</div>
<div class="class2">class2
</div>
</div>
<div class="parentdiv">
<div class="class1">class1
</div>
<div class="someother">smoother
</div>
<div class="class3">class3
</div>
Upvotes: 1