遍历无序列表以添加和删除类

时间:2019-07-08 14:57:23

标签: javascript jquery

我正在尝试遍历无序列表,并遍历每个列表项(使用 ticker-item 类),并临时向其添加一个类,以便CSS可以对其进行一些转换)。

var a = [];
$(".ticker-item").each(function(index) {
  a[index] = $(this);
  setTimeout(function() {
    a[index].addClass('current').delay(500).queue(function(next) {
      a[index].removeClass('current');
      next();
    });
  }, index * 500);
});

我已经搜索了各种SO文章,并且我相信该函数将正确添加和删除类,但是当前似乎不使用li的吗?

这是HTML:

      <div class="ticker">
        <ul class="ticker-items">
            <li class="ticker-item">
                <a href="/categories/featured/summer-sale/1185">
                    <p><strong>Summer Sale</strong>? Now more things at <strong>50% off!</strong></p>
                </a>
            </li>
            <li class="ticker-item">
                <a href="/about">
                    <p>Things for kids you'll ? too. <strong>Our story</strong></p>
                </a>
            </li>
            <li class="ticker-item">
                <a href="/help/delivery-and-returns">
                    <p><strong>Free</strong> Delivery* &amp; <strong>Free</strong> Returns ?</p>
                </a>
            </li>
        </ul>
    </div>

3 个答案:

答案 0 :(得分:2)

您不会遍历类为ticker-item的元素,而是会遍历像这样的元素:<ticker-item> ... </ticker-item>

要更改循环,您必须使用类选择器:

$(".ticker-item").each

答案 1 :(得分:0)

您没有按班级名称访问

将$(“ ticker-item”)。each更改为$(“。ticker-item”)。each(类选择器)

答案 2 :(得分:0)

removeClassjQuery#delay根据定义正在使用队列。因此setTimeout(() => { $('#noqueue') .addClass('colored') .delay(2000) .removeClass('colored'); $('#queue') .queue(function(next) { $(this).addClass('colored'); next(); }) .delay(2000) .queue(function() { $(this).removeClass('colored'); }); }, 1000);对这些方法没有影响。

解决方案是将它们都执行到排队的回调中,以便将它们推入队列,如下所示:

div {
  transition: color .5s;
}

.colored {
  color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="noqueue">no queue</div>
<div id="queue">with queue</div>
setTimeout

下面我举了一个链接动画的例子。

请注意,我没有使用jQuery#delay,但只使用了$('button').on('click', () => { $('ul > li').each((i, li) => { $(li) .delay(500 * (i + 1)) .queue(next => { $(li).addClass('colored'); next(); }) .delay(750) .queue(() => ($(li).removeClass('colored'), $(li).dequeue())); }); });,因为我发现它更干净。

此外,如果您想在不刷新页面的情况下重新执行动画,请不要忘记让动画出队。

ul > li {
  transition: color 1s;
}

.colored {
  color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
</ul>

<button>Color them!</button>
import datetime

now = datetime.datetime.today()
print(datetime.datetime(now.year, now.month + 1, 1) - datetime.timedelta(days = 1))