Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
228 views
in Technique[技术] by (71.8m points)

javascript - How to toggle next ul class?

I am trying to open/close nested sub menus, I have three or four levels of nested uls which are all closed but the first one. When I start clicking on the elements, the next ul should open and toggle show/hide. The js below it's not fully accomplishing what I am looking for.

CSS

.closed {
   display: none;
}

.opened {
   display: block;
}

HTML

<ul>
  <li><button type="button">TOGGLE</button>
     <ul class="closed">
        <li>Two
           <ul class="closed">
              <li>Three
                <ul class="closed">
                   <li>Four</li>
                </ul>
              </li>
           </ul>
         </li>
     </ul>
   </li>
</ul>

Trying js:

$("button").on("click", function(){
   $(this).parent().next("ul").toggle(function()  {
      $(this).removeClass("closed").addClass("opened");
    }, function() {
      $(this).removeClass("opened").addClass("closed");
    });
});
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You should use $(this).next("ul") instead of $(this).parent().next("ul"), because ul is the immediate next element of the button. And you can use toggleClass method for toggling class like following.

$("button").on("click", function(){
    $(this).next("ul").toggleClass("closed opened");
});

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...