我有一个大项目,我需要截取像element.src,element.href,element.style等东西的分配。我想通过defineSetter来做到这一点,但它的行为非常奇怪(使用Chrome 8.0.552.231)Javascript的奇怪行为__defineSetter__
一个例子:
var attribs = ["href", "src", "background", "action", "onblur", "style", "onchange", "onclick", "ondblclick", "onerror", "onfocus", "onkeydown", "onkeypress", "onkeyup", "onmousedown", "onmousemove", "onmouseover", "onmouseup", "onresize", "onselect", "onunload"];
for(a = 0; a < attribs.length; a++) {
var attrib_name = attribs[a];
var func = new Function("attrib_value", "this.setAttribute(\"" + attrib_name + "\", attrib_value.toUpperCase());");
HTMLElement.prototype.__defineSetter__(attrib_name, func);
}
这段代码应该做的是,只要给attribs常见的元素属性分配,它使用的setAttribute()设置一个大写的版本的属性。
对于一些非常奇怪的原因,setter只能工作约1/3的任务。
例如与
element.src = "test"
新src为 “TEST”,喜欢它应该是
与element.href = "test"
新href是 “试验”,然而
,没有大写
然后,即使当我尝试element.__lookupSetter__("href")
,它返回适当的大写setter
最奇怪的事是不同的变量,Chrome和Firefox
帮助之间正确拦截!
你可以推荐一些其他方法,或进一步解释你的意思/如何实现DOM元素的包装对象? – 2011-01-07 23:58:38