Reputation: 31
how can i expand the nearest corresponding ul.dropmenu by clicking on button1 instead of giving them all a separate id/class?
html:
<ul class="mainlist">
<li><img id="wall1.thumb" class="icon" src="/images/placeholder.jpg">
<img class="button1 d1" src="/images/info.png">
<ul class="dropmenu menu1">
<p id="wall1.info">
<div>File Size:</div>
<div>Upload Date:</div>
<div>Dimensions:</div>
</p>
</ul>
</li>
<li><img id="wall2.thumb" class="icon" src="/images/placeholder.jpg">
<img class="button1 d2" src="/images/info.png”>
<ul class="dropmenu menu2">
<p id="wall2.info">
<div>File Size:</div>
<div>Upload Date:</div>
<div>Dimensions:</div>
</p>
</ul>
</li>
</ul>
jquery:
$(".d1").on("click", function () {
$("ul.dropmenu.menu1").slideToggle("fast", "linear", function() {
$("ul.dropmenu").not("ul.dropmenu.menu1").slideUp(200, "swing");
})
})
$(".d2").on("click", function () {
$("ul.dropmenu.menu2").slideToggle("fast", "linear", function() {
$("ul.dropmenu").not("ul.dropmenu.menu2").slideUp(200, "swing");
})
})
i already saw the suggested question here: open closest ul on click jQuery however it does not solve my problem because i am trying to expand a ul inside an li inside a ul and not just an li inside a ul
Upvotes: 0
Views: 106
Reputation: 32354
Use the siblings()
function to get the dropdown menu near your clicked button
$(".d1,.d2").on("click", function() {
var closestUl = $(this).siblings("ul.dropmenu")
closestUl.slideToggle("fast", "linear", function() {
$("ul.dropmenu").not(closestUl).slideUp(200, "swing");
})
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="mainlist">
<li>
<img id="wall1.thumb" class="icon" src="/images/placeholder.jpg" />
<img class="button1 d1" src="/images/info.png" />
<ul class="dropmenu menu1">
<p id="wall1.info">
<div>File Size:</div>
<div>Upload Date:</div>
<div>Dimensions:</div>
</p>
</ul>
</li>
<li>
<img id="wall2.thumb" class="icon" src="/images/placeholder.jpg" />
<img class="button1 d2" src="/images/info.png" />
<ul class="dropmenu menu2">
<p id="wall2.info ">
<div>File Size:</div>
<div>Upload Date:</div>
<div>Dimensions:</div>
</p>
</ul>
</li>
</ul>
Upvotes: 1
Reputation: 481
$('.button1').on('click',function(){
var parent=$(this).parents('li');
$(parent).find('.button1').next('.dropmenu').slideToggle();
$(parent).siblings('li').find('.button1').next('.dropmenu').slideUp()
})
.dropmenu{
display:none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<ul class="mainlist">
<li><img id="wall1.thumb" class="icon" src="/images/placeholder.jpg">
<img class="button1 d1" src="/images/info.png">
<ul class="dropmenu menu1">
<p id="wall1.info">
<div>File Size:</div>
<div>Upload Date:</div>
<div>Dimensions:</div>
</p>
</ul>
</li>
<li><img id="wall2.thumb" class="icon" src="/images/placeholder.jpg">
<img class="button1 d2" src="/images/info.png">
<ul class="dropmenu menu2">
<p id="wall2.info">
<div>File Size:</div>
<div>Upload Date:</div>
<div>Dimensions:</div>
</p>
</ul>
</li>
</ul>
Upvotes: 0