]> source.dussan.org Git - jquery.git/commitdiff
Offset: Increase search depth when finding the 'real' offset parent
authorLiam James <liam@minimaximize.com>
Fri, 19 Apr 2024 13:47:52 +0000 (23:47 +1000)
committerGitHub <noreply@github.com>
Fri, 19 Apr 2024 13:47:52 +0000 (15:47 +0200)
Changes:
* Increase search depth when finding for the real offset parent
* Ignore offset for statically positioned offset parent
* Add tests for the position of an element in a table

Closes gh-4861

src/offset.js
test/unit/offset.js

index ca27ca5c7d74adc5767d4373edffddcb022b51cc..65dab2bd205202c4533018638d3b789a8ecb6cc8 100644 (file)
@@ -121,12 +121,13 @@ jQuery.fn.extend( {
                        doc = elem.ownerDocument;
                        offsetParent = elem.offsetParent || doc.documentElement;
                        while ( offsetParent &&
-                               ( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
+                               offsetParent !== doc.documentElement &&
                                jQuery.css( offsetParent, "position" ) === "static" ) {
 
-                               offsetParent = offsetParent.parentNode;
+                               offsetParent = offsetParent.offsetParent || doc.documentElement;
                        }
-                       if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
+                       if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 &&
+                               jQuery.css( offsetParent, "position" ) !== "static" ) {
 
                                // Incorporate borders into its offset, since they are outside its content origin
                                parentOffset = jQuery( offsetParent ).offset();
index 73ec8928fe40cb02757ed5f7d4461130b0f9d82f..50eee3dd5ddb913d56b4d348d51cb4ee85175231 100644 (file)
@@ -436,13 +436,16 @@ testIframe( "fixed", "offset/fixed.html", function( assert, $, window ) {
 } );
 
 testIframe( "table", "offset/table.html", function( assert, $ ) {
-       assert.expect( 4 );
+       assert.expect( 6 );
 
        assert.equal( $( "#table-1" ).offset().top, 6, "jQuery('#table-1').offset().top" );
        assert.equal( $( "#table-1" ).offset().left, 6, "jQuery('#table-1').offset().left" );
 
        assert.equal( $( "#th-1" ).offset().top, 10, "jQuery('#th-1').offset().top" );
        assert.equal( $( "#th-1" ).offset().left, 10, "jQuery('#th-1').offset().left" );
+
+       assert.equal( $( "#th-1" ).position().top, 10, "jQuery('#th-1').position().top" );
+       assert.equal( $( "#th-1" ).position().left, 10, "jQuery('#th-1').position().left" );
 } );
 
 testIframe( "scroll", "offset/scroll.html", function( assert, $, win ) {