No need to use expensive try/catch when check for element being orphaned suffices.
This commit is contained in:
parent
a7f05ee8b5
commit
56fb5b84a1
@ -1190,11 +1190,13 @@ Element.Methods = {
|
||||
**/
|
||||
cumulativeOffset: function(element) {
|
||||
var valueT = 0, valueL = 0;
|
||||
do {
|
||||
valueT += element.offsetTop || 0;
|
||||
valueL += element.offsetLeft || 0;
|
||||
element = element.offsetParent;
|
||||
} while (element);
|
||||
if (element.parentNode) {
|
||||
do {
|
||||
valueT += element.offsetTop || 0;
|
||||
valueL += element.offsetLeft || 0;
|
||||
element = element.offsetParent;
|
||||
} while (element);
|
||||
}
|
||||
return Element._returnOffset(valueL, valueT);
|
||||
},
|
||||
|
||||
@ -1558,8 +1560,7 @@ else if (Prototype.Browser.IE) {
|
||||
function(proceed, element) {
|
||||
element = $(element);
|
||||
// IE throws an error if element is not in document
|
||||
try { element.offsetParent }
|
||||
catch(e) { return $(document.body) }
|
||||
if (!element.parentNode) return $(document.body);
|
||||
var position = element.getStyle('position');
|
||||
if (position !== 'static') return proceed(element);
|
||||
element.setStyle({ position: 'relative' });
|
||||
@ -1573,8 +1574,7 @@ else if (Prototype.Browser.IE) {
|
||||
Element.Methods[method] = Element.Methods[method].wrap(
|
||||
function(proceed, element) {
|
||||
element = $(element);
|
||||
try { element.offsetParent }
|
||||
catch(e) { return Element._returnOffset(0,0) }
|
||||
if (!element.parentNode) return Element._returnOffset(0, 0);
|
||||
var position = element.getStyle('position');
|
||||
if (position !== 'static') return proceed(element);
|
||||
// Trigger hasLayout on the offset parent so that IE6 reports
|
||||
@ -1590,14 +1590,6 @@ else if (Prototype.Browser.IE) {
|
||||
);
|
||||
});
|
||||
|
||||
Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
|
||||
function(proceed, element) {
|
||||
try { element.offsetParent }
|
||||
catch(e) { return Element._returnOffset(0,0) }
|
||||
return proceed(element);
|
||||
}
|
||||
);
|
||||
|
||||
Element.Methods.getStyle = function(element, style) {
|
||||
element = $(element);
|
||||
style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
|
||||
|
@ -1322,6 +1322,10 @@ new Test.Unit.Runner({
|
||||
this.assertEnumEqual([0,0], offset);
|
||||
this.assertIdentical(0, offset.top);
|
||||
this.assertIdentical(0, offset.left);
|
||||
|
||||
var innerEl = new Element('div'), outerEl = new Element('div');
|
||||
outerEl.appendChild(innerEl);
|
||||
this.assertEnumEqual([0,0], innerEl.cumulativeOffset());
|
||||
},
|
||||
|
||||
testViewportOffset: function() {
|
||||
|
Loading…
Reference in New Issue
Block a user