Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何选择边界内的图元?_Javascript_Jquery - Fatal编程技术网

Javascript 如何选择边界内的图元?

Javascript 如何选择边界内的图元?,javascript,jquery,Javascript,Jquery,我试图找出一种方法来选择在绝对定位的div中重叠(并且包含,完全覆盖)的元素 我基本上需要选择某个像素边界内的元素。如何使用jQuery实现这一点?以下是基本思路: var left = 100, top = 200, right = 300, bottom = 500; $('#main-div').children().filter(){ var $this = $(this), offset = $this.offset(),

我试图找出一种方法来选择在绝对定位的div中重叠(并且包含,完全覆盖)的元素

我基本上需要选择某个像素边界内的元素。如何使用jQuery实现这一点?

以下是基本思路:

var left = 100,
    top = 200,
    right = 300,
    bottom = 500;

$('#main-div').children().filter(){
    var $this = $(this),
        offset = $this.offset(),
        rightEdge = $this.width() + offset.left,
        bottomEdge = $this.height() + offset.top;

    if (offset.top > top && offset.left > left && right > rightEdge && bottom > bottomEdge) {
        return true;
    }

    return false;
});

将顶部的坐标更改为您需要的任何坐标。

假设您的html类似于:

<div id="thediv"></div>
<div id="one">one</div><br />
<div id="two">two</div><br />
<div id="three">three</div><br />

一个
两个
三个
您可以使用以下jQuery:

$('div:not(#thediv)').filter(function() {
    var offset = $(this).offset();
    var left = offset.top;
    var top = offset.top;
    var right = left + $(this).width();
    var bottom = top + $(this).height();

    var offset2 = $('#thediv').offset();
    var left2 = offset2.top;
    var top2 = offset2.top;
    var right2 = left2 + $('#thediv').width();
    var bottom2 = top2 + $('#thediv').height();

    if (
        (
            (left < left2 && right > left2)
            || (left > left2 && right < right2)
            || (left < right2 && right > right2)
        )
        &&
        (
            (top < top2 && bottom > top2)
            || (top > top2 && bottom < bottom2)
            || (top < bottom2 && bottom > bottom2)
        )
        )
        return true;
    else
        return false;
}).css('background-color', 'red');
$('div:not(#thediv)).filter(function(){
var offset=$(this.offset();
var left=offset.top;
var top=offset.top;
var right=left+$(this).width();
var bottom=top+$(this).height();
var offset2=$('#thediv').offset();
var left2=offset2.top;
var top2=偏移量2.top;
var right2=left2+$('#thediv').width();
var bottom2=top2+$('thediv')。高度();
如果(
(
(左<左2&右>左2)
||(左>左2&右<右2)
||(左<右2&右>右2)
)
&&
(
(顶部<顶部2&底部>顶部2)
||(顶部>顶部2和底部<底部2)
||(顶部<底部2&底部>底部2)
)
)
返回true;
其他的
返回false;
}).css(“背景色”、“红色”);
与主div重叠的div将变为红色。你可以测试一下


这样做的目的是获取元素的
offset()
width()
height()
,并查看它们是否重叠。代码可能不是很有效,我这样写是为了说明清楚。

如果
#main div
是我的绝对定位div,我知道x和y偏移量,但是子项不会在
#main div
上,它将在
body
标记上。那么我是否只需要遍历实体,直到其中一个元素匹配?(我不知道会有什么样的表现)@Andrew-如果是这样的话,那么你必须遍历页面上的所有元素。你确定你处理这个问题的方法正确吗?也许你还可以做些别的事情(我不知道,只是说说而已)。如果这是唯一的办法,那么我想我会这么做的。也许有更好的解决方案,但现在就可以了。谢谢@Andrew我相信顶部的值是您的绝对div,
#main div
是您的“底层”元素的容器。请注意,它只遍历一个级别(通过
children()
)。这与我最初想要的略有不同,但仍然有用。如果其中一个角重叠,而不是完全封闭在边界中,您的答案将选择元素。我可以用这个来代替。所以你得到了+1