[英]Overriding getOffsetParent() function in prototype.js in a separate file
我正在尝试对prototype.js应用补丁,以解决IE8到IE10中的布局问题。 我需要在单独的文件中应用此补丁,因为prototype.js是我们cms的核心文件之一。 我尝试了很多方法,但是我尝试的所有补丁都被忽略了,原始文件中的功能仍在使用。 以下是我可以使其最接近运行的代码。 下面的函数正在执行,而不是原始函数,但是其中的函数无法正常工作,导致脚本无法正常工作。 有什么建议吗? 我正在尝试在单独文件中的https://github.com/sstephenson/prototype/issues/156中应用补丁。 我的文件prototype-patch.js加载在prototype.js之后。
Element.getOffsetParent = Element.getOffsetParent.wrap(function (element) {
element = $(element);
alert(element);
if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))
return $(document.body);
alert('test2');
var isInline = (Element.getStyle(element, 'display') === 'inline');
if (!isInline && element.offsetParent && Element.visible(element)) return $(element.offsetParent);
while ((element = element.parentNode) && element !== document.body) {
if (Element.getStyle(element, 'position') !== 'static') {
return isHtml(element) ? $(document.body) : $(element);
}
}
return $(document.body);
});
Element.addMethods({
getOffsetParent: Element.getOffsetParent
});
尝试以这种方式覆盖方法
var getOffsetParent = function (element) {
element = $(element);
if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))
return $(document.body);
var isInline = (Element.getStyle(element, 'display') === 'inline');
if (!isInline && element.offsetParent && Element.visible(element)) return
$(element.offsetParent);
while ((element = element.parentNode) && element !== document.body) {
if (Element.getStyle(element, 'position') !== 'static') {
return isHtml(element) ? $(document.body) : $(element);
}
}
return $(document.body);
};
Element.addMethods({
getOffsetParent: getOffsetParent
});
极客Num的回答使我朝着正确的方向前进。 我必须添加4个功能才能使其正常工作。
function isBody(element) {
return element.nodeName.toUpperCase() === 'BODY';
}
function isHtml(element) {
return element.nodeName.toUpperCase() === 'HTML';
}
function isDocument(element) {
return element.nodeType === Node.DOCUMENT_NODE;
}
function isDetached(element) {
return element !== document.body && !Element.descendantOf(element, document.body);
}
var getOffsetParent = function (element) {
element = $(element);
if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))
return $(document.body);
var isInline = (Element.getStyle(element, 'display') === 'inline');
if (!isInline && element.offsetParent && Element.visible(element)) return $(element.offsetParent);
while ((element = element.parentNode) && element !== document.body) {
if (Element.getStyle(element, 'position') !== 'static') {
return isHtml(element) ? $(document.body) : $(element);
}
}
return $(document.body);
};
Element.addMethods({
getOffsetParent: getOffsetParent
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.