I am working with a lot of DOM manipulation and need to know several values of an element to determine its position within the DOM and I have written the following to help scrape several of the bits of information I need to proceed. To me this looks very heavy and there might be some room to help improve the speed / accuracy of returning this information. Any help in speeding this up or helping with the redundancy issues would be most helpful. [jsFiddle](https://jsfiddle.net/googabeast/h8rqnh83/) $.fn.info = function(){ var $el = this, obj = { _css: {}, $win: $(window), $doc: $(document), x: Math.floor($el.offset().left), y: Math.floor($el.offset().top), w: Math.floor($el.width()), h: Math.floor($el.height()), tag: $el.prop("tagName").toLowerCase(), computedCss: function(){ var css = ["width", "height", "float", "color", "font-size", "position", "top", "right", "bottom", "left", "margin-top", "margin-right", "margin-bottom", "margin-left", "color", "display", "visibility"]; for(var i = 0; i < css.length; i++){ if(css[i].indexOf("-") > -1){ var temp = css[i].replace("-", "_"); this._css[temp] = $el.css(css[i]); }else{ this._css[css[i]] = $el.css(css[i]); }; }; return this; }, checkVisibility: function(){ this.visible = (((this.y + this.h) <= (this.top + this.winH)) && (this.y >= this.top)); this.partial = ((this.y <= (this.top + this.winH)) && ((this.y + this.h) >= this.top)); return this; }, init: function(){ this.winH = Math.floor(this.$win.height()); this.winW = Math.floor(this.$win.width()); this.docH = Math.floor(this.$doc.height()); this.docW = Math.floor(this.$doc.width()); this.top = this.$win.scrollTop(); /* :compute the box-modal a,b,c,d with {x,y} values: */ /* a----b */ this.a = { x:this.x, y:this.y }; /* | | */ this.b = { x:this.x+this.w, y:this.y }; /* | | */ this.c = { x:this.x, y:this.y+this.h }; /* c----d */ this.d = { x:this.x+this.w, y:this.y+this.h }; this.computedCss(); this.checkVisibility(); return this; } }.init(); return obj; };