【问题标题】:jquery - select last div on the click widthjquery - 在点击宽度上选择最后一个 div
【发布时间】:2014-02-15 23:39:17
【问题描述】:

我们在页面上有很多divs(参见下面的演示)。 divs的容器宽度不固定。

如果用户点击 jquery 行中的一些DIV,如何选择行中的最后一个DIV?

html 的演示: http://jsfiddle.net/F7xHa/

文字说明:(# - 是 div,X - 点击 div,S - 需要用 jquery 选择这个 DIV)

# # # # # - line
# X # # S - line with click
# # # # # - line
# # # # # - line

这个想法(也许不是最好的): 1.当用户点击一些DIV(标记为X)时,需要从页面顶部以某种方式偏移到点击位置。 (屏幕点击宽度) 2.然后以某种方式选择所有可见元素直到单击位置宽度) 3. 选择其中的:last。

也许它会有所帮助:我已经知道如何选择页面上最后一个可见的 DIV。我使用 inViewport 插件。但现在任务变得更加艰巨了。

【问题讨论】:

  • 我认为这个问题已经被问过了。
  • 并删除,因为没有示例,也没有人理解这个问题。现在它带有 html 示例。并原谅我的语言。也许有人可以编辑问题以使其干净?
  • 我不知道如何定义divs的行 - 如果浏览器窗口的大小发生变化,它可以改变。
  • 你的问题很好地改进了
  • @A.Wolff 谢谢。您还可以对其进行编辑以使其更好。 (也许我犯了一些拼写错误。我不确定我定义该行的那一行(很难解释)。

标签: javascript jquery html css viewport


【解决方案1】:

这样的事情怎么样:

$('.img').on('click', function(){
    var $self = $(this),
        elements = [],
        selfOff = $self.offset().top;
    $('.img').each(function(){
        if($(this).offset().top == selfOff){
            elements.push($(this))
        }
    })
    elements[elements.length-1].addClass('last')
})

Demo

可能是一个更好的选择,但目前想不出另一个。 这将只选择最后一个!

如果需要选择当前和最后一个之间的元素:

$('.img').on('click', function(){
    var $self = $(this),
        elements = [],
        selfOff = $self.offset().top;
    $('.img').each(function(){
        if($(this).offset().top == selfOff){
            elements.push($(this))
        }
    })
    $self.nextUntil(elements[elements.length -1]).addClass('last')
})

Demo

或者,如果您想选择所有元素(单击和最后一个):

$('.img').on('click', function(){
    var $self = $(this),
        elements = [],
        selfOff = $self.offset().top;
    $('.img').each(function(){
        if($(this).offset().top == selfOff){
            elements.push($(this))
        }
    })
    $self.nextUntil(elements[elements.length-1]).add($self).add(elements[elements.length-1]).addClass('last')
})

Demo

【讨论】:

  • 谢谢!哇,你非常擅长 jquery 编码。似乎 95% 的访问者(如我)不知道如何制作第一个变体,但您制作了其中两个。哪个更好用?也许有一些优点和缺点?还是便携性问题?
  • 还有一个问题是所有safe 在没有jquery .ready() 功能的情况下使用。如果dom 没有准备好,但用户点击了,评论中的最后一个似乎会出错?
  • 对于解决方案,如果您使用img的相同宽度和高度,两者都很好,如果您使用不同的宽度,@A。 Wolff 将无法正常工作,如果您使用不同的高度(如果它们浮动,外观会损坏)我的将无法正常工作...关于 dom 每个 code 位于 dom ready 上,请查看 jsfiddle 的左侧和你会看到 onDomready。
  • 谢谢,我明白了。我的意思是我将在没有dom ready 的情况下使用此代码,可以吗?所以,如果加载了一些 DIV 并且用户点击了,我需要立即响应。
  • 我不太关注你。您可以在 doc.ready 或 doc.load 上加载代码,没有其他选择。
猜你喜欢
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
相关资源
最近更新 更多