🌐 AI搜索 & 代理 主页
Skip to content

Commit 1777899

Browse files
authored
Offset: report offset for 0 sized elements
Fixes gh-3267 Closes gh-3367
1 parent 4e50967 commit 1777899

File tree

2 files changed

+38
-15
lines changed

2 files changed

+38
-15
lines changed

src/offset.js

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ jQuery.fn.extend( {
9393
return;
9494
}
9595

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

103104
rect = elem.getBoundingClientRect();
104105

105-
// Make sure element is not hidden (display: none)
106-
if ( rect.width || rect.height ) {
107-
doc = elem.ownerDocument;
108-
win = getWindow( doc );
109-
docElem = doc.documentElement;
106+
doc = elem.ownerDocument;
107+
win = getWindow( doc );
108+
docElem = doc.documentElement;
110109

111-
return {
112-
top: rect.top + win.pageYOffset - docElem.clientTop,
113-
left: rect.left + win.pageXOffset - docElem.clientLeft
114-
};
115-
}
116-
117-
// Return zeros for disconnected and hidden elements (gh-2310)
118-
return rect;
110+
return {
111+
top: rect.top + win.pageYOffset - docElem.clientTop,
112+
left: rect.left + win.pageXOffset - docElem.clientLeft
113+
};
119114
},
120115

121116
position: function() {

test/unit/offset.js

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ QUnit.test( "empty set", function( assert ) {
4242
} );
4343

4444
QUnit.test( "disconnected element", function( assert ) {
45-
assert.expect( 2 );
45+
assert.expect( 3 );
4646

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

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

5657
QUnit.test( "hidden (display: none) element", function( assert ) {
57-
assert.expect( 2 );
58+
assert.expect( 3 );
5859

5960
var node = jQuery( "<div style='display: none' />" ).appendTo( "#qunit-fixture" ),
6061
result = node.offset();
@@ -66,6 +67,33 @@ QUnit.test( "hidden (display: none) element", function( assert ) {
6667
// valid input, but will return zeros for back-compat
6768
assert.equal( result.top, 0, "Retrieving offset on hidden elements returns zeros (gh-2310)" );
6869
assert.equal( result.left, 0, "Retrieving offset on hidden elements returns zeros (gh-2310)" );
70+
assert.equal( Object.keys( result ).length, 2, "Retrieving offset on hidden elements returns offset object (gh-3167)" );
71+
} );
72+
73+
QUnit.test( "0 sized element", function( assert ) {
74+
assert.expect( 3 );
75+
76+
var node = jQuery( "<div style='margin: 5px; width: 0; height: 0' />" ).appendTo( "#qunit-fixture" ),
77+
result = node.offset();
78+
79+
node.remove();
80+
81+
assert.notEqual( result.top, 0, "Retrieving offset on 0 sized elements (gh-3167)" );
82+
assert.notEqual( result.left, 0, "Retrieving offset on 0 sized elements (gh-3167)" );
83+
assert.equal( Object.keys( result ).length, 2, "Retrieving offset on 0 sized elements returns offset object (gh-3167)" );
84+
} );
85+
86+
QUnit.test( "hidden (visibility: hidden) element", function( assert ) {
87+
assert.expect( 3 );
88+
89+
var node = jQuery( "<div style='margin: 5px; visibility: hidden' />" ).appendTo( "#qunit-fixture" ),
90+
result = node.offset();
91+
92+
node.remove();
93+
94+
assert.notEqual( result.top, 0, "Retrieving offset on visibility:hidden elements (gh-3167)" );
95+
assert.notEqual( result.left, 0, "Retrieving offset on visibility:hidden elements (gh-3167)" );
96+
assert.equal( Object.keys( result ).length, 2, "Retrieving offset on visibility:hidden elements returns offset object (gh-3167)" );
6997
} );
7098

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

0 commit comments

Comments
 (0)