$(this).children() 不起作用

$(this).children() not functioning

提问人:la_llum 提问时间:6/1/2022 最后编辑:Mark Schultheissla_llum 更新时间:6/1/2022 访问量:55

问:

我正在尝试创建一个“.years”列表。当我单击第一年(es.2009)时,它应该只显示该年的内容(在本例中为“Content1”)。当我单击列表.years的另一个元素时,“Content1”应该隐藏。

$(".years").click(function(e) {
  e.preventDefault();
  console.log($(this).children());
  //console.log($(this).find("h5"));       
  //.find($(".award"))

  //$('.award').toggleClass('active'); //this is what I want to do

});
.award {
  display: none;
}

.award.active {
  display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="years">2004</li>
  <div class="award">
    <h5>Content1</h5>
  </div>
  <li class="years">2009</li>
  <div class="award">
    <h5>Content2</h5>
  </div>
  <div class="award">
    <h5>Content3</h5>
  </div>
</ul>

javascript jquery 这个

评论


答:

5赞 Moebius 6/1/2022 #1
  1. 你的 HTML 几乎是无效的,你不应该把 div 放在 ul 里面,放在 li 外面。Onl liul 的有效直系子项。

  2. div 放在 li 中,你应该没问题,因为那样它将成为你的“years”元素的子元素。

1赞 Mark Schultheiss 6/1/2022 #2

您的标记无效 = 应该只包含 .将尾部/结束标签移近,您可以根据需要切换子元素。<ul><li>

$(".years").on('click', function(e) {
  e.preventDefault();
  console.log($(this).children('.award').length);
  $(this).find('.award').toggleClass('active');
});
.award {
  display: none;
}

.award.active {
  display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="years">2004
    <div class="award">
      <h5>Content1</h5>
    </div>
  </li>
  <li class="years">2009
    <div class="award">
      <h5>Content2</h5>
    </div>
    <div class="award">
      <h5>Content3</h5>
    </div>
  </li>
</ul>