手风琴样式列表添加和删除class问题

Accordion style list add and remove class problem

我有一个带标题的基本列表。在一个完美的世界中,当用户单击标题或嵌套图标时,会显示一个描述性段落并且图标会发生变化。如果用户逐个标题,在继续之前打开和关闭则没有问题,但是打开并移动以打开下一个并且事情变得奇怪和错误。段落将切换,但图标保持不变。

完美世界场景,点击标题或img,图标变为减号显示段落,段落保持打开状态点击下一个标题,段落和图标变化等等。哈希和 re-hashed 一遍又一遍,我不知所措。

$(".hold-text").click(function() {
  if (!$("img").hasClass("foo")) {
    $(this).find(".title").children("img").attr("src", "minus-icon.png").addClass("foo");
    $(this).children("p").toggle();
  } else {
    $(this).find(".title").children("img").attr("src", "plus-icon.png").removeClass("foo");
    $(this).children("p").toggle();
  }
});
.hold-text>p {
  display: none
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="hold-text">
    <h3 class="title">lorem blah<img class="img" src="plus-icon.png" /></h3>
    <p>text</p>
  </li>
  <li class="hold-text">
    <h3 class="title">lorem blah<img class="img" src="plus-icon.png" /></h3>
    <p>text</p>
  </li>
  <li class="hold-text">
    <h3 class="title">lorem blah<img class="img" src="plus-icon.png" /></h3>
    <p>text</p>
  </li>
</ul>

  • !$("img").hasClass 将检查带有 class 的任何图像 .. 您可以使用 !$(this).find("img").hasClass 而不是使用 if 语句,您可以使用 .toggleClass() .. 请参阅下一个例子

$(".hold-text").click(function() {
  var Getimage = $(this).find("img");         //Get the Image
  Getimage.attr("src", Getimage.attr('src') == "minus-icon.png" ? "plus-icon.png" : "minus-icon.png").toggleClass("foo");  // toggle between image src and toggle the class
  $(this).find("p").toggle();  // toggle p
  console.log(Getimage.attr('src'));   // Just to check the src is changed
});
.hold-text>p {
  display: none
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="hold-text">
    <h3 class="title">lorem blah<img class="img" src="plus-icon.png" /></h3>
    <p>text</p>
  </li>
  <li class="hold-text">
    <h3 class="title">lorem blah<img class="img" src="plus-icon.png" /></h3>
    <p>text</p>
  </li>
  <li class="hold-text">
    <h3 class="title">lorem blah<img class="img" src="plus-icon.png" /></h3>
    <p>text</p>
  </li>
</ul>

解释: Getimage.attr('src') == "minus-icon.png" ? "plus-icon.png" : "minus-icon.png" 这行表示如果图像 src 是 "minus-icon.png" 更改为 "plus-icon.png" 否则 "minus-icon.png"