Ph4ntom
Ph4ntom

Reputation: 31

expand corresponding ul on click

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

Answers (2)

madalinivascu
madalinivascu

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

Tariq Javed
Tariq Javed

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

Related Questions