Javascript 如何选择边界内的图元?
我试图找出一种方法来选择在绝对定位的div中重叠(并且包含,完全覆盖)的元素 我基本上需要选择某个像素边界内的元素。如何使用jQuery实现这一点?以下是基本思路: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(),
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