【问题标题】:Jquery iteration for child elements子元素的jQuery迭代
【发布时间】:2018-02-23 09:57:45
【问题描述】:

对于一个简单的菜单,当菜单选项悬停时,我使用 jQuery 淡入特定的 h1。我可以为每个元素编写代码行,但我想知道如何使用迭代更有效地编写代码。

<ul class="menu_locations">
    <li><a>Option A</a></li>
    <li><a>Option B</a></li>
    <li><a>Option C</a></li>
    <li><a>Option D</a></li>
</ul>

<div class="menu_info">
    <h1>This is option A</h1>
    <h1>This is option B</h1>
    <h1>This is option C</h1>
    <h1>And finally we have D</h1>
</div>

这就是我认为它应该在 jQuery 中的样子

$(".menu_locations").children().each().hover(
    function() {
        $("").fadeIn();
    }, function() {
        $("").fadeOut();
});

【问题讨论】:

  • $(".class") 返回一个元素列表,它相当于 document.getElementsByClassName。所以你可以这样做 $(".myclass li") 它将返回 myclass 中的所有 li,不需要每个。

标签: jquery html css iteration


【解决方案1】:

不需要each,jQuery 内部迭代
您可以使用索引来定位具有相同索引的 H1,stop 将在其他东西悬停时停止动画。

您还可以使用fadeToggle 在同一个处理程序中淡入和淡出

$(".menu_locations li").hover(function() {
  $(".menu_info h1").eq( $(this).index() ).stop(true, true).fadeToggle();
});
.menu_info h1 {display:none; position: absolute}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="menu_locations">
    <li><a>Option A</a></li>
    <li><a>Option B</a></li>
    <li><a>Option C</a></li>
    <li><a>Option D</a></li>
</ul>

<div class="menu_info">
    <h1>This is option A</h1>
    <h1>This is option B</h1>
    <h1>This is option C</h1>
    <h1>And finally we have D</h1>
</div>

【讨论】:

  • 这很好,但就像在您的示例中一样,过渡是重叠的。这会产生奇怪的堆叠效果,您可以在其中短暂看到两行 h1。我怎样才能让它消失?
  • 另外,由于某种原因,我无法弄清楚,第二个 info h1 行在将鼠标移到元素上时不断重播悬停动画(它在闪烁)。其他菜单选项没有这个。
  • 当你淡出一个元素,同时淡入另一个元素时会发生这种情况,它们没有位置,它们堆叠,一个在另一个之下。要修复它,它们必须位于同一个地方
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 1970-01-01
  • 2011-08-15
  • 2014-05-20
  • 1970-01-01
  • 2021-02-21
相关资源
最近更新 更多