Jump To …

within.js

(function ($) {

Checks if x and y coordinates are within a box with left, top, width and height

  var withinBox = function (x, y, left, top, width, height) {
    return (y >= top && y < top + height && x >= left && x < left + width);
  }

  $.fn.within = function (left, top, useOffsetCache) {
    var ret = []
    this.each(function () {
      var q = jQuery(this);

      if (this == document.documentElement) {
        return ret.push(this);
      }

uses either the cached offset or .offset()

      var offset = useOffsetCache ? $.data(this, "offsetCache") || $.data(this, "offsetCache", q.offset()) : q.offset();

Check if the given coordinates are within the area of the current element

      var res = withinBox(left, top, offset.left, offset.top, this.offsetWidth, this.offsetHeight);

      if (res) {

Add it to the results

        ret.push(this);
      }
    });

    return this.pushStack($.unique(ret), "within", left + "," + top);
  }

  $.fn.withinBox = function (left, top, width, height, useOffsetCache) {
    var ret = []
    this.each(function () {
      var q = jQuery(this);

      if (this == document.documentElement) return ret.push(this);

use cached offset or .offset()

      var offset = useOffsetCache ? $.data(this, "offset") || $.data(this, "offset", q.offset()) : q.offset();

      var ew = q.width(),
        eh = q.height(),

Checks if the element offset is within the given box

        res = !((offset.top > top + height) || (offset.top + eh < top) || (offset.left > left + width) || (offset.left + ew < left));

      if (res) ret.push(this);
    });
    return this.pushStack($.unique(ret), "withinBox", $.makeArray(arguments).join(","));
  }

  return $;
})(jQuery);