【问题标题】:in jQuery, select element that is within window of smaller div在 jQuery 中,选择较小 div 窗口内的元素
【发布时间】:2012-06-23 18:19:35
【问题描述】:

我有一个无序列表,它是一个较小的父 div 中的子元素,并且在第一个 div 中滚动。如何选择当前在第一个 div 窗口中可见的 <li>

我尝试的是使用父容器的jQuery偏移坐标和我从here得到的elementFromPoint

xcoo = $('#menuholder1').offset().left;
ycoo = $('#menuholder1').offset().top;
clickedID = document.elementFromPoint(xcoo, ycoo).id;

但是,这会将元素返回高一级。所以我尝试只添加到 ycoo,但它什么也没返回。

有人对此有其他解决方案吗?有问题的页面是http://do.right.by

【问题讨论】:

  • 您的方法(要求浏览器在某个位置查找元素)对我来说似乎有点尴尬。你知道每个 LI 元素的高度,以及它的容器的 scrollTop 位置,所以你可以自己计算哪个元素在某个位置(在视图中),不是吗?
  • 同意@schellmax ,代码也会更容易阅读。还请查看position() 方法

标签: jquery position coordinates offset


【解决方案1】:

我用这个插件来选择可见元素:http://archive.plugins.jquery.com/project/viewport

它添加了伪选择器:in-viewport,所以你可以这样选择:

$("li:in-viewport")

要使其应用于父元素而不是窗口,请在此处获取修改后的源代码:https://gist.github.com/2979829

对于看起来像这样的 IIFE

(function($, window) {
    //bunch of code...
})(jQuery, "#menuholder1");

#menuholder1 是选择父元素的查询。

【讨论】:

  • 我找到了该插件,但如果元素在浏览器窗口内但不在父 div 的可见部分中,则会应用 :in-viewport?
  • 对我来说,它返回父容器中的所有 li 元素。您可以在网站上查看控制台日志。
  • 抱歉,稍微修改一下源代码即可解决。我发布了一个解释。
  • 嗯,很有希望,但我现在变得不确定......它必须是直接父母吗?
  • 终于修复了!从window 切换到父级时,我忘记使用偏移量而不是滚动。
猜你喜欢
  • 2011-08-26
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
  • 2015-12-06
  • 1970-01-01
相关资源
最近更新 更多