我想覆盖所有html元素的offsetParent成员的默认行为。如果有可能,我想做这样的事情:
// 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;
};
这甚至可能吗?如果是,请发布更正后的代码示例。谢谢!
更新
@some感谢您的帮助。听起来这是不可能的。如果您有兴趣,我已经扩展了在新question中引发此问题的问题。
答案 0 :(得分:3)
据我所知,这是不可能的。 在firefox中我得到异常“设置一个只有getter的属性”,IE给出错误,Chrome给出错误,但在Opera中它可以工作(如果我在元素上分配它,而不是原型)!
但是你有另一个问题。 offsetParent不是一个函数,所以永远不会像函数一样调用它,你的警报永远不会发生。在opera(我找到的唯一可以替换它的浏览器)中,你只能恢复功能。
但是你可以添加一个新功能(可以在Firefox,Chrome和Opera中使用,但在IE中没有,因为IE没有构造函数属性):
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();
<强>更新强> 通过阅读您的说明here,我看到了您的错误:
您的页面上已有解决方案:保存对象的名称。您可以选择在更新内容时更新全局变量,或者只更新内部div的innerHTML。