我正在尝试将一个补丁应用于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
});
答案 0 :(得分:0)
尝试以这种方式覆盖方法
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
});
答案 1 :(得分:0)
Geek 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
});