3 testoffset("absolute", function( jQuery ) {
4 equals( jQuery('#absolute-1').offset().top, 1, "jQuery('#absolute-1').offset().top" );
5 equals( jQuery('#absolute-1').offset().left, 1, "jQuery('#absolute-1').offset().left" );
7 equals( jQuery('#absolute-1-1').offset().top, 5, "jQuery('#absolute-1-1').offset().top" );
8 equals( jQuery('#absolute-1-1').offset().left, 5, "jQuery('#absolute-1-1').offset().left" );
10 equals( jQuery('#absolute-1-1-1').offset().top, 9, "jQuery('#absolute-1-1-1').offset().top" );
11 equals( jQuery('#absolute-1-1-1').offset().left, 9, "jQuery('#absolute-1-1-1').offset().left" );
13 equals( jQuery('#absolute-2').offset().top, 20, "jQuery('#absolute-2').offset().top" );
14 equals( jQuery('#absolute-2').offset().left, 20, "jQuery('#absolute-2').offset().left" );
17 equals( jQuery('#absolute-1').position().top, 0, "jQuery('#absolute-1').position().top" );
18 equals( jQuery('#absolute-1').position().left, 0, "jQuery('#absolute-1').position().left" );
20 equals( jQuery('#absolute-1-1').position().top, 1, "jQuery('#absolute-1-1').position().top" );
21 equals( jQuery('#absolute-1-1').position().left, 1, "jQuery('#absolute-1-1').position().left" );
23 equals( jQuery('#absolute-1-1-1').position().top, 1, "jQuery('#absolute-1-1-1').position().top" );
24 equals( jQuery('#absolute-1-1-1').position().left, 1, "jQuery('#absolute-1-1-1').position().left" );
26 equals( jQuery('#absolute-2').position().top, 19, "jQuery('#absolute-2').position().top" );
27 equals( jQuery('#absolute-2').position().left, 19, "jQuery('#absolute-2').position().left" );
30 testoffset("relative", function( jQuery ) {
31 var ie = jQuery.browser.msie && parseInt( jQuery.browser.version ) < 8;
33 // IE is collapsing the top margin of 1px
34 equals( jQuery('#relative-1').offset().top, ie ? 6 : 7, "jQuery('#relative-1').offset().top" );
35 equals( jQuery('#relative-1').offset().left, 7, "jQuery('#relative-1').offset().left" );
37 // IE is collapsing the top margin of 1px
38 equals( jQuery('#relative-1-1').offset().top, ie ? 13 : 15, "jQuery('#relative-1-1').offset().top" );
39 equals( jQuery('#relative-1-1').offset().left, 15, "jQuery('#relative-1-1').offset().left" );
41 // IE is collapsing the top margin of 1px
42 equals( jQuery('#relative-2').offset().top, ie ? 141 : 142, "jQuery('#relative-2').offset().top" );
43 equals( jQuery('#relative-2').offset().left, 27, "jQuery('#relative-2').offset().left" );
46 // IE is collapsing the top margin of 1px
47 equals( jQuery('#relative-1').position().top, ie ? 5 : 6, "jQuery('#relative-1').position().top" );
48 equals( jQuery('#relative-1').position().left, 6, "jQuery('#relative-1').position().left" );
50 // IE is collapsing the top margin of 1px
51 equals( jQuery('#relative-1-1').position().top, ie ? 4 : 5, "jQuery('#relative-1-1').position().top" );
52 equals( jQuery('#relative-1-1').position().left, 5, "jQuery('#relative-1-1').position().left" );
54 // IE is collapsing the top margin of 1px
55 equals( jQuery('#relative-2').position().top, ie ? 140 : 141, "jQuery('#relative-2').position().top" );
56 equals( jQuery('#relative-2').position().left, 26, "jQuery('#relative-2').position().left" );
59 testoffset("static", function( jQuery ) {
60 var ie = jQuery.browser.msie && parseInt( jQuery.browser.version ) < 8;
62 // IE is collapsing the top margin of 1px
63 equals( jQuery('#static-1').offset().top, ie ? 6 : 7, "jQuery('#static-1').offset().top" );
64 equals( jQuery('#static-1').offset().left, 7, "jQuery('#static-1').offset().left" );
66 // IE is collapsing the top margin of 1px
67 equals( jQuery('#static-1-1').offset().top, ie ? 13 : 15, "jQuery('#static-1-1').offset().top" );
68 equals( jQuery('#static-1-1').offset().left, 15, "jQuery('#static-1-1').offset().left" );
70 // IE is collapsing the top margin of 1px
71 equals( jQuery('#static-1-1-1').offset().top, ie ? 20 : 23, "jQuery('#static-1-1-1').offset().top" );
72 equals( jQuery('#static-1-1-1').offset().left, 23, "jQuery('#static-1-1-1').offset().left" );
74 // IE is collapsing the top margin of 1px
75 equals( jQuery('#static-2').offset().top, ie ? 121 : 122, "jQuery('#static-2').offset().top" );
76 equals( jQuery('#static-2').offset().left, 7, "jQuery('#static-2').offset().left" );
79 // IE is collapsing the top margin of 1px
80 equals( jQuery('#static-1').position().top, ie ? 5 : 6, "jQuery('#static-1').position().top" );
81 equals( jQuery('#static-1').position().left, 6, "jQuery('#static-1').position().left" );
83 // IE is collapsing the top margin of 1px
84 equals( jQuery('#static-1-1').position().top, ie ? 12 : 14, "jQuery('#static-1-1').position().top" );
85 equals( jQuery('#static-1-1').position().left, 14, "jQuery('#static-1-1').position().left" );
87 // IE is collapsing the top margin of 1px
88 equals( jQuery('#static-1-1-1').position().top, ie ? 19 : 22, "jQuery('#static-1-1-1').position().top" );
89 equals( jQuery('#static-1-1-1').position().left, 22, "jQuery('#static-1-1-1').position().left" );
91 // IE is collapsing the top margin of 1px
92 equals( jQuery('#static-2').position().top, ie ? 120 : 121, "jQuery('#static-2').position().top" );
93 equals( jQuery('#static-2').position().left, 6, "jQuery('#static-2').position().left" );
96 if ( jQuery.offset.supportsFixedPosition ) {
97 testoffset("fixed", function( jQuery ) {
98 equals( jQuery('#fixed-1').offset().top, 1001, "jQuery('#fixed-1').offset().top" );
99 equals( jQuery('#fixed-1').offset().left, 1001, "jQuery('#fixed-1').offset().left" );
101 equals( jQuery('#fixed-2').offset().top, 1021, "jQuery('#fixed-2').offset().top" );
102 equals( jQuery('#fixed-2').offset().left, 1021, "jQuery('#fixed-2').offset().left" );
106 testoffset("table", function( jQuery ) {
107 var ie = jQuery.browser.msie;
109 equals( jQuery('#table-1').offset().top, 6, "jQuery('#table-1').offset().top" );
110 equals( jQuery('#table-1').offset().left, 6, "jQuery('#table-1').offset().left" );
112 equals( jQuery('#th-1').offset().top, 10, "jQuery('#th-1').offset().top" );
113 equals( jQuery('#th-1').offset().left, 10, "jQuery('#th-1').offset().left" );
115 // equals( jQuery('#th-2').offset().top, 10, "jQuery('#th-2').offset().top" );
116 // equals( jQuery('#th-2').offset().left, 116, "jQuery('#th-2').offset().left" );
118 // equals( jQuery('#th-3').offset().top, 10, "jQuery('#th-3').offset().top" );
119 // equals( jQuery('#th-3').offset().left, 222, "jQuery('#th-3').offset().left" );
121 // equals( jQuery('#td-1').offset().top, ie ? 116 : 112, "jQuery('#td-1').offset().top" );
122 // equals( jQuery('#td-1').offset().left, 10, "jQuery('#td-1').offset().left" );
124 // equals( jQuery('#td-2').offset().top, ie ? 116 : 112, "jQuery('#td-2').offset().top" );
125 // equals( jQuery('#td-2').offset().left, 116, "jQuery('#td-2').offset().left" );
127 // equals( jQuery('#td-3').offset().top, ie ? 116 : 112, "jQuery('#td-3').offset().top" );
128 // equals( jQuery('#td-3').offset().left, 222, "jQuery('#td-3').offset().left" );
131 testoffset("scroll", function( jQuery ) {
132 var ie = jQuery.browser.msie && parseInt( jQuery.browser.version ) < 8;
134 // IE is collapsing the top margin of 1px
135 equals( jQuery('#scroll-1').offset().top, ie ? 6 : 7, "jQuery('#scroll-1').offset().top" );
136 equals( jQuery('#scroll-1').offset().left, 7, "jQuery('#scroll-1').offset().left" );
138 // IE is collapsing the top margin of 1px
139 equals( jQuery('#scroll-1-1').offset().top, ie ? 9 : 11, "jQuery('#scroll-1-1').offset().top" );
140 equals( jQuery('#scroll-1-1').offset().left, 11, "jQuery('#scroll-1-1').offset().left" );
143 testoffset("body", function( jQuery ) {
144 equals( jQuery('body').offset().top, 1, "jQuery('#body').offset().top" );
145 equals( jQuery('body').offset().left, 1, "jQuery('#body').offset().left" );
148 test("offsetParent", function(){
151 var body = jQuery("body").offsetParent();
152 equals( body.length, 1, "Only one offsetParent found." );
153 equals( body[0], document.body, "The body is its own offsetParent." );
155 var header = jQuery("#header").offsetParent();
156 equals( header.length, 1, "Only one offsetParent found." );
157 equals( header[0], document.body, "The body is the offsetParent." );
159 var div = jQuery("#nothiddendivchild").offsetParent();
160 equals( div.length, 1, "Only one offsetParent found." );
161 equals( div[0], document.body, "The body is the offsetParent." );
163 jQuery("#nothiddendiv").css("position", "relative");
165 div = jQuery("#nothiddendivchild").offsetParent();
166 equals( div.length, 1, "Only one offsetParent found." );
167 equals( div[0], jQuery("#nothiddendiv")[0], "The div is the offsetParent." );
169 div = jQuery("body, #nothiddendivchild").offsetParent();
170 equals( div.length, 2, "Two offsetParent found." );
171 equals( div[0], document.body, "The body is the offsetParent." );
172 equals( div[1], jQuery("#nothiddendiv")[0], "The div is the offsetParent." );
175 function testoffset(name, fn) {
177 test(name, function() {
178 // pause execution for now
181 // load fixture in iframe
182 var iframe = loadFixture(),
183 win = iframe.contentWindow,
184 interval = setInterval( function() {
185 if ( win && win.jQuery && win.jQuery.isReady ) {
186 clearInterval( interval );
189 // call actual tests passing the correct jQuery isntance to use
190 fn.call( this, win.jQuery );
191 document.body.removeChild( iframe );
197 function loadFixture() {
198 var src = './data/offset/' + name + '.html?' + parseInt( Math.random()*1000 ),
199 iframe = jQuery('<iframe />').css({
200 width: 500, height: 500, position: 'absolute', top: -600, left: -600, visiblity: 'hidden'
201 }).appendTo('body')[0];
202 iframe.contentWindow.location = src;