jQuery:获取给定“y”上方的元素位置

发布于 2024-10-02 22:48:05 字数 243 浏览 3 评论 0原文

如何使用 jQuery 以优雅的方式做到这一点?

z 属性(例如:红色背景)应用于 div 父级的每个子级
而它们的位置高于给定的顶部偏移 y

我尝试过不同的方式,但我对其中任何一个都不满意......
我知道必须有一种简短而优雅的方法来做到这一点......

How can you do this with jQuery, in an elegant way?

Apply z attribute (e.g.: red background) to every children of a div parent
while their position is above a given top-offset y.

I've tried in different ways, but I'm not happy with any of them...
I know there must be a short and elegant way to do it...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

草莓酥 2024-10-09 22:48:05

既然你说你已经尝试了几种方法,并且你只是在寻找更优雅的方法,那么我假设你已经解决了偏移部分,并且我将使用 offset 我自己。根据需要修改该部分。为了优雅,您可以创建一个自定义选择器检查顶部偏移量:

$.expr[':'].above = function(obj, index, meta, stack) { 
    return $(obj).offset().top < meta[3];
}

然后您可以这样查询它:

$('#myParentDiv').find('div:above(100)').css('background-color', 'red');

当然,这也可以表达为

$('#myParentDiv div:above(100)').css('background-color', 'red');

or ,正如注释中指出的那样

var y = 100;
$('#myParentDiv div:above('+y+')').css('background-color', 'red');

Since you're saying you've tried a few ways, and you're just looking for something more elegant, I'll assume you have the offset part worked out, and I'll just go with offset myself. Modify that part as needed. For elegance, you could create a custom selector checking top offset:

$.expr[':'].above = function(obj, index, meta, stack) { 
    return $(obj).offset().top < meta[3];
}

You could then query it as such:

$('#myParentDiv').find('div:above(100)').css('background-color', 'red');

Of course this could just as well have been expressed as

$('#myParentDiv div:above(100)').css('background-color', 'red');

or, as pointed out in comments

var y = 100;
$('#myParentDiv div:above('+y+')').css('background-color', 'red');
萌无敌 2024-10-09 22:48:05

像这样的事情应该可以完成工作:

var y = 250,
    RED = '#F00';

$('#parent > *').css('background-color', function (i, v)
{
    if ($(this).offset().top < y)
    {
        return RED;
    }
    return v;
});

选择器 '#parent > *' 将选择 id parent 的元素的所有直接子元素(不是所有后代)。我认为这就是您正在寻找的,因为您说过“适用于 div parent 的每个子级。”

演示:http://jsfiddle.net/mattball/87QFU/1/

Something like this should get the job done:

var y = 250,
    RED = '#F00';

$('#parent > *').css('background-color', function (i, v)
{
    if ($(this).offset().top < y)
    {
        return RED;
    }
    return v;
});

The selector '#parent > *' will select all immediate children (not all descendants) of the element with id parent. I assume that's what you're looking for, since you said "apply... to every children of a div parent."

Demo: http://jsfiddle.net/mattball/87QFU/1/

雪若未夕 2024-10-09 22:48:05

孩子们是动态放置的顶部偏移还是他们都有一个共同的CSS类?

 <script type="text/javascript">
   $("div").children(".offsetelement").css("background-color", "red");
 </script>

Are the childrens dynamically placed with top-offset or do they all have a common css-class?

 <script type="text/javascript">
   $("div").children(".offsetelement").css("background-color", "red");
 </script>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文