Skip to content

Commit

Permalink
Offset: report offset for 0 sized elements
Browse files Browse the repository at this point in the history
  • Loading branch information
jbedard authored Dec 13, 2016
1 parent 4e50967 commit 1777899
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 15 deletions.
21 changes: 8 additions & 13 deletions src/offset.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ jQuery.fn.extend( {
return;
}

// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
// Support: IE <=11 only
// Running getBoundingClientRect on a
// disconnected node in IE throws an error
Expand All @@ -102,20 +103,14 @@ jQuery.fn.extend( {

rect = elem.getBoundingClientRect();

// Make sure element is not hidden (display: none)
if ( rect.width || rect.height ) {
doc = elem.ownerDocument;
win = getWindow( doc );
docElem = doc.documentElement;
doc = elem.ownerDocument;
win = getWindow( doc );
docElem = doc.documentElement;

return {
top: rect.top + win.pageYOffset - docElem.clientTop,
left: rect.left + win.pageXOffset - docElem.clientLeft
};
}

// Return zeros for disconnected and hidden elements (gh-2310)
return rect;
return {
top: rect.top + win.pageYOffset - docElem.clientTop,
left: rect.left + win.pageXOffset - docElem.clientLeft
};
},

position: function() {
Expand Down
32 changes: 30 additions & 2 deletions test/unit/offset.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ QUnit.test( "empty set", function( assert ) {
} );

QUnit.test( "disconnected element", function( assert ) {
assert.expect( 2 );
assert.expect( 3 );

var result = jQuery( document.createElement( "div" ) ).offset();

Expand All @@ -51,10 +51,11 @@ QUnit.test( "disconnected element", function( assert ) {
// valid input, but will return zeros for back-compat
assert.equal( result.top, 0, "Retrieving offset on disconnected elements returns zeros (gh-2310)" );
assert.equal( result.left, 0, "Retrieving offset on disconnected elements returns zeros (gh-2310)" );
assert.equal( Object.keys( result ).length, 2, "Retrieving offset on disconnected elements returns offset object (gh-3167)" );
} );

QUnit.test( "hidden (display: none) element", function( assert ) {
assert.expect( 2 );
assert.expect( 3 );

var node = jQuery( "<div style='display: none' />" ).appendTo( "#qunit-fixture" ),
result = node.offset();
Expand All @@ -66,6 +67,33 @@ QUnit.test( "hidden (display: none) element", function( assert ) {
// valid input, but will return zeros for back-compat
assert.equal( result.top, 0, "Retrieving offset on hidden elements returns zeros (gh-2310)" );
assert.equal( result.left, 0, "Retrieving offset on hidden elements returns zeros (gh-2310)" );
assert.equal( Object.keys( result ).length, 2, "Retrieving offset on hidden elements returns offset object (gh-3167)" );
} );

QUnit.test( "0 sized element", function( assert ) {
assert.expect( 3 );

var node = jQuery( "<div style='margin: 5px; width: 0; height: 0' />" ).appendTo( "#qunit-fixture" ),
result = node.offset();

node.remove();

assert.notEqual( result.top, 0, "Retrieving offset on 0 sized elements (gh-3167)" );
assert.notEqual( result.left, 0, "Retrieving offset on 0 sized elements (gh-3167)" );
assert.equal( Object.keys( result ).length, 2, "Retrieving offset on 0 sized elements returns offset object (gh-3167)" );
} );

QUnit.test( "hidden (visibility: hidden) element", function( assert ) {
assert.expect( 3 );

var node = jQuery( "<div style='margin: 5px; visibility: hidden' />" ).appendTo( "#qunit-fixture" ),
result = node.offset();

node.remove();

assert.notEqual( result.top, 0, "Retrieving offset on visibility:hidden elements (gh-3167)" );
assert.notEqual( result.left, 0, "Retrieving offset on visibility:hidden elements (gh-3167)" );
assert.equal( Object.keys( result ).length, 2, "Retrieving offset on visibility:hidden elements returns offset object (gh-3167)" );
} );

testIframe( "absolute", "offset/absolute.html", function( assert, $, iframe ) {
Expand Down

0 comments on commit 1777899

Please sign in to comment.