aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Bedard <jason+github@jbedard.ca>2016-12-12 22:32:11 -0800
committerGitHub <noreply@github.com>2016-12-12 22:32:11 -0800
commit1777899a747647f3fa839eea4b0bb695d3b60f06 (patch)
tree6d972c56c02bd42f14c362edf087bdb992bba4ae
parent4e50967725e61a5d71c2792131de61dec0520f9c (diff)
downloadjquery-1777899a747647f3fa839eea4b0bb695d3b60f06.tar.gz
jquery-1777899a747647f3fa839eea4b0bb695d3b60f06.zip
Offset: report offset for 0 sized elements
Fixes gh-3267 Closes gh-3367
-rw-r--r--src/offset.js21
-rw-r--r--test/unit/offset.js32
2 files changed, 38 insertions, 15 deletions
diff --git a/src/offset.js b/src/offset.js
index 54442eb45..5baefdb21 100644
--- a/src/offset.js
+++ b/src/offset.js
@@ -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
@@ -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() {
diff --git a/test/unit/offset.js b/test/unit/offset.js
index c0df5f1ca..5b73ede60 100644
--- a/test/unit/offset.js
+++ b/test/unit/offset.js
@@ -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();
@@ -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();
@@ -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 ) {