Given absolute or relative position (top & left) is there any way to get the nearest html element to these co-ordinates?
Or alternately, is there any way to craft a selector (or use some jQuery construct) to enumerate elements and then find which is closes to the provided co-ordinates? Assume that the set of elements is small and finite.
I've built a jQuery method that returns closest element to offset, within the collection:
jQuery.fn.closestToOffset = function(offset) {
var el = null,
elOffset,
x = offset.left,
y = offset.top,
distance,
dx,
dy,
minDistance;
this.each(function() {
var $t = $(this);
elOffset = $t.offset();
right = elOffset.left + $t.width();
bottom = elOffset.top + $t.height();
if (
x >= elOffset.left &&
x <= right &&
y >= elOffset.top &&
y <= bottom
) {
el = $t;
return false;
}
var offsets = [
[elOffset.left, elOffset.top],
[right, elOffset.top],
[elOffset.left, bottom],
[right, bottom],
];
for (var off in offsets) {
dx = offsets[off][0] - x;
dy = offsets[off][1] - y;
distance = Math.sqrt(dx * dx + dy * dy);
if (minDistance === undefined || distance < minDistance) {
minDistance = distance;
el = $t;
}
}
});
return el;
};
Notes:
Use it like this:
$('div.myCollection').closestToOffset({left: 5, top: 5});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With