Rewrote .offsetParent() to work against the full jQuery set, added tests. Fixes #4922.
This commit is contained in:
parent
f0681d98fe
commit
a3b8ac413f
|
@ -147,11 +147,13 @@ jQuery.fn.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
offsetParent: function() {
|
offsetParent: function() {
|
||||||
var offsetParent = this[0].offsetParent || document.body;
|
return this.map(function(){
|
||||||
while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') === 'static') ) {
|
var offsetParent = this.offsetParent || document.body;
|
||||||
offsetParent = offsetParent.offsetParent;
|
while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') === 'static') ) {
|
||||||
}
|
offsetParent = offsetParent.offsetParent;
|
||||||
return jQuery( offsetParent );
|
}
|
||||||
|
return offsetParent;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -145,7 +145,32 @@ testoffset("body", function( jQuery ) {
|
||||||
equals( jQuery('body').offset().left, 1, "jQuery('#body').offset().left" );
|
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) {
|
function testoffset(name, fn) {
|
||||||
|
|
||||||
|
@ -177,4 +202,4 @@ function testoffset(name, fn) {
|
||||||
iframe.contentWindow.location = src;
|
iframe.contentWindow.location = src;
|
||||||
return iframe;
|
return iframe;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue