Skip to content
Permalink
Browse files

Rewrote .offsetParent() to work against the full jQuery set, added te…

…sts. Fixes #4922.
  • Loading branch information
jeresig committed Jul 19, 2009
1 parent f0681d9 commit a3b8ac413f9c55994922c20b39223ab9ae6d1afa
Showing with 33 additions and 6 deletions.
  1. +7 −5 src/offset.js
  2. +26 −1 test/unit/offset.js
@@ -147,11 +147,13 @@ jQuery.fn.extend({
},

offsetParent: function() {
var offsetParent = this[0].offsetParent || document.body;
while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') === 'static') ) {
offsetParent = offsetParent.offsetParent;
}
return jQuery( offsetParent );
return this.map(function(){
var offsetParent = this.offsetParent || document.body;
while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') === 'static') ) {
offsetParent = offsetParent.offsetParent;
}
return offsetParent;
});
}
});

@@ -145,7 +145,32 @@ testoffset("body", function( jQuery ) {
equals( jQuery('body').offset().left, 1, "jQuery('#body').offset().left" );
});

test("offsetParent", function(){
expect(11);

var body = jQuery("body").offsetParent();
equals( body.length, 1, "Only one offsetParent found." );
equals( body[0], document.body, "The body is its own offsetParent." );

var header = jQuery("#header").offsetParent();
equals( header.length, 1, "Only one offsetParent found." );
equals( header[0], document.body, "The body is the offsetParent." );

var div = jQuery("#nothiddendivchild").offsetParent();
equals( div.length, 1, "Only one offsetParent found." );
equals( div[0], document.body, "The body is the offsetParent." );

jQuery("#nothiddendiv").css("position", "relative");

div = jQuery("#nothiddendivchild").offsetParent();
equals( div.length, 1, "Only one offsetParent found." );
equals( div[0], jQuery("#nothiddendiv")[0], "The div is the offsetParent." );

div = jQuery("body, #nothiddendivchild").offsetParent();
equals( div.length, 2, "Two offsetParent found." );
equals( div[0], document.body, "The body is the offsetParent." );
equals( div[1], jQuery("#nothiddendiv")[0], "The div is the offsetParent." );
});

function testoffset(name, fn) {

@@ -177,4 +202,4 @@ function testoffset(name, fn) {
iframe.contentWindow.location = src;
return iframe;
}
}
}

0 comments on commit a3b8ac4

Please sign in to comment.
You can’t perform that action at this time.