jQuery next()无法正常工作

btqmn9zl  于 2023-06-22  发布在  jQuery
关注(0)|答案(5)|浏览(128)

我有一组链接的图像,我想每3秒循环一次,但一次只显示一个:

# some django template code:
<div id="featured-prints" class="featured-promo">
    {% for p in promo_prints %}
    <a href="{% url 'print_order_with' p.id %}">
        <img class="featured-print" src="{{ MEDIA_URL }}{{ p.id }}_{{ THUMBNAIL_SIZE }}.png" alt="{{ p.body }}" />
    </a>
    {% endfor %}
</div>

# the JS to cycle through:

$(function(){
    $('.featured-promo a:gt(0)').hide();
    setInterval(function(){
        $('.featured-promo :first-child')
        .hide()
        .next('a')
        .fadeIn(2000)
        .end()
        .appendTo('.featured-promo');
}, 1000);

我最近在img周围添加了<a>,现在JavaScript无法工作;它不会fadeIn()下一个链接的图像。我已经尝试了几种变体,包括将“a”传递给next()和“a img”,但似乎都不起作用。我也试过将parent()链接到hide()函数,仍然没有结果。
有什么建议吗?

bkhjykvo

bkhjykvo1#

试着改变

$('.featured-promo :first-child')

致:

$('.featured-promo > :first-child')

如果没有>,它会下降到每个级别。因此,它找到.featured-promo的第一个子节点(第一个a),以及每个a的第一个子节点(每个img)。它隐藏了所有这些,然后只在下一个a中消失。img标签保持隐藏状态,因为没有任何东西可以使它们淡入。
选择器中的>意味着只将下一部分与直接子级匹配,而不是所有子级。

qcuzuvrc

qcuzuvrc2#

错误就在那里

$(function(){
  $('.featured-promo a:gt(0)').hide();
   setInterval(function(){
     $('.featured-promo :first-child')// here
     .hide()
     .next('a')
     .fadeIn(2000)
     .end()
     .appendTo('.featured-promo');// no need to append as the for loop is already appending the anchors to the featured-promo.
   }, 1000);
)};

您正在调用.featured-promo上的.next('a') first-child,它不是.featured-promo的兄弟节点,而是它的子节点。elementA.next()用于获取同级元素(元素A之后的元素,即元素B)
要获取其他a s',您应该像这样编写

$(function(){
  var index = 0;
  var total_a = $('.featured-promo a').length;
   setInterval(function(){
     $('.featured-promo a:gt(' + index + ')')
     .hide()
     .next('a')
     .fadeIn(2000);
     index = (index < total_a) ? index + 1 : 0;// will increment if number of a is greater than index else 0 and continue like a slider..
   }, 2000);// better use 2000 ms as you're using 2000ms in the `fadeIn()`
 });
mzmfm0qo

mzmfm0qo3#

$(function(){
    $('.featured-promo a:gt(0)').hide();
    setInterval(function(){
    $('.featured-promo :first-child')
    .hide()
    .find('a')
    .fadeIn(2000)
    .end()
    .appendTo('.featured-promo');
}, 1000);

尝试find而不是next

6rqinv9w

6rqinv9w4#

在hide()之后使用end():

$('.featured-promo :first-child')
        .hide()
        .end()
        .next('a')
        .fadeIn(2000)
        .end()
        .appendTo('.featured-promo');
bvk5enib

bvk5enib5#

试试这个:

$(function(){
    $('.featured-promo a:gt(0)').hide();
    setInterval(function(){
        $('.featured-promo').children('a .featured-print').eq(1).parent()
        .hide()
        .next('a')
        .fadeIn(2000)
        .end()
        .appendTo('.featured-prints');
}, 1000);

相关问题