【问题标题】:I'm having difficulty with jQuery's $(selector).each()我在使用 jQuery 的 $(selector).each() 时遇到了困难
【发布时间】:2012-05-16 14:36:53
【问题描述】:

此处示例:http://jsfiddle.net/KyW6c/2/

我有一个有序列表。每个列表项都是我的投资组合中的一个项目。我正在编写一些 jQuery,它将单击的列表项向上移动到有序列表的左上角。我已经完成了这项工作,但我遇到的问题是单击项下方的列表项正在移动。小提琴中提供了此代码(已注释掉)。

一旦加载页面,我尝试实施的解决方案会将每个列表项的位置设置为绝对位置,并将左右位置设置为有序列表中的当前位置。我不知道我是否遇到了麻烦,因为我误解了 .each() 的作用,或者只是如何实现它。

谢谢。

编辑:问题是每个列表项的 left 和 top 值都设置为 0,所以它们都只是在左上角重叠。如果取消注释 jQuery,就会发现问题。

编辑 2:我发现如果在设置 left 和 top 属性的同时不将位置设置为绝对,它可以正常工作。

【问题讨论】:

  • api.jquery.com/each "遍历一个 jQuery 对象,为每个匹配的元素执行一个函数。"
  • 嗯..刚刚意识到你找到了答案

标签: jquery each


【解决方案1】:

问题在于,当您遍历每个元素时,您正在设置 'postion:absolute',它正在从定位中移除当前元素。当每个元素都从布局中“移除”时,后面的元素会浮动到 0,0 位置。

通过自下而上的迭代,您可以先保存左/上,然后应用 postion:absolute 而不影响下一个元素:

  $($('.project').get().reverse()).each(function(){
    var pos = $(this).position();
    $(this).css({
      left: pos.left + 'px',
      top: pos.top + 'px',
      position: 'absolute',
      'z-index': '999'
    })
  });

  // your original code
  $('.project').click(function(){
    var $this  = $(this),
        left = $this.position().left + 'px',
        top  = $this.position().top + 'px';
    $this.css({
      left:      left,
      top:       top,
      position:  'absolute',
      'z-index': '999'
    }).animate({
      left:       0,
      top:        0,
      width:      '750px'
    }, 'fast', 'swing')
  }); 

【讨论】:

    【解决方案2】:

    http://jsfiddle.net/KyW6c/11/

    在朋友的帮助下弄明白了。谢谢Matt

    【讨论】:

      【解决方案3】:
      $('.project').ready().each(..)
      

      应该是

      $('.project').each(..)
      

      你可以试试这样的:

        var left = 0,
            top = 0;
      $('.project').each(function(){
          var $this  = $(this),
          $this.css({
            left:      (left+10) + 'px',
            top:       (top+10) + 'px',
            position:  'absolute',
            'z-index': '999'
          })
        });
      

      【讨论】:

      • 我也试过了,但并没有解决问题。每个
      • 仍然设置为 left: 0 和 top: 0.
    • @user1378927 $this.position().left/top 总是得到 0
    • 最底部的jQuery没有被注释掉。
    • 你刚才放在那里的代码不会起作用,因为这不会让
    • 保持在适当的位置。我需要获取当前位置并将其设置为当另一个
    • 移动时它不会移动。不能用 CSS 来做,因为我用的是 CMS,而
    • 的数量是未知的。
    • 猜你喜欢
      相关资源
      最近更新 更多
      热门标签