重写内置JavaScript对象上的成员
我想覆盖所有html元素的offsetParent成员的默认行为。如果可能的话,我想这样做:重写内置JavaScript对象上的成员,javascript,client-side,Javascript,Client Side,我想覆盖所有html元素的offsetParent成员的默认行为。如果可能的话,我想这样做: // For <div id="foo"></div> var oFooElem = document.getElementById("foo"); oFooElem._offsetParent = oFooElem.offsetParent; oFooElem.prototype.offsetParent = function() { window.status = '
// For <div id="foo"></div>
var oFooElem = document.getElementById("foo");
oFooElem._offsetParent = oFooElem.offsetParent;
oFooElem.prototype.offsetParent = function() {
window.status = 'offsetParent called.';
return this._offsetParent;
};
//用于
var of ooelem=document.getElementById(“foo”);
OFOELEM._offsetParent=OFOELEM.offsetParent;
oFooElem.prototype.offsetParent=函数(){
window.status='offsetParent called';
返回此项。_offsetParent;
};
这可能吗?如果是这样,请张贴更正后的代码示例。谢谢
更新:
@有些人感谢你的帮助。听起来这是不可能的。如果您感兴趣,我已经用一种新的方式详细介绍了引发这个问题的问题。据我所知,这是不可能的。 在firefox中,我得到一个异常“设置一个只有getter的属性”,即给出错误,Chrome给出错误,但在Opera中它可以工作(如果我在元素上分配它,而不是在原型上分配它) 但你还有一个问题。offsetParent不是函数,因此它永远不会像函数一样被调用,您的警报也永远不会发生。在opera(我找到的唯一可以替换它的浏览器)中,您只能重新获得该功能 但是,您可以添加一个新函数(将在Firefox、Chrome和Opera中工作,但在IE中不工作,因为IE没有构造函数属性): 更新 通过阅读您的描述,我看到了您的错误:
您的页面上已经有了解决方案:保存对象的名称。或者,您可以选择在更新内容时更新全局变量,或者仅更新内部div的innerHTML。据我所知,这是不可能的。 在firefox中,我得到一个异常“设置一个只有getter的属性”,即给出错误,Chrome给出错误,但在Opera中它可以工作(如果我在元素上分配它,而不是在原型上分配它) 但你还有一个问题。offsetParent不是函数,因此它永远不会像函数一样被调用,您的警报也永远不会发生。在opera(我找到的唯一可以替换它的浏览器)中,您只能重新获得该功能 但是,您可以添加一个新函数(将在Firefox、Chrome和Opera中工作,但在IE中不工作,因为IE没有构造函数属性): 更新 通过阅读您的描述,我看到了您的错误:
您的页面上已经有了解决方案:保存对象的名称。或者,您可以选择在更新内容时更新全局变量,或者只更新内部div的innerHTML。我在firefox中尝试时遇到异常“WrappedNative prototype对象上的非法操作”。您不能在offsetParent属性AFAIK上执行此操作。你希望完成什么?e、 你是不是一直在试图得到一个真正的上/左坐标?我希望能彻底解决这个问题@CodeChef:我更新了我的答案,并在另一个网站上发布了回复。当我在firefox中尝试时,我得到异常“WrappedNative prototype对象上的非法操作”。你不能在offsetParent属性AFAIK上这样做。你希望完成什么?e、 你是不是一直在试图得到一个真正的上/左坐标?我希望能彻底解决这个问题@CodeChef:我更新了我的答案,并在另一个网站上发布了回复。
var e = document.getElementById("mydiv"); //Get a div element
//Adds a _offsetParent function to all DIV elements.
e.constructor.prototype._offsetParent=function(){
alert("offset parent called"); return this.offsetParent;
};
e._offsetParent();