这是我到目前为止所做的:http://jsfiddle.net/beCVL/5/
这就是我试图覆盖默认cloneNode的方式: Object.defineProperty(Object.prototype,“cloneNode”,{ get:cloneNode2, set:cloneNode2 });
但它不起作用,所以,我认为Object.prototype没有cloneNode,但Element.prototype也没有。
那么,假设我的方法是正确的,我需要使用哪个类来覆盖cloneNode? p>
答案 0 :(得分:0)
尝试使用:
Node.prototype.cloneNode = cloneNode2;
Object.defineProperty
不用于此目的。以下是使用它的示例:
var o = {};
Object.defineProperty(o, 'blah', {
'get': function () { return 'asdf'; },
'set': function (x) { alert(x); }
});
alert(o.blah); // alerts 'asdf'
o.blah = 'fdsa'; // alerts 'fdsa'
显然,这仅适用于Chrome。
要解决实际问题,只需将RGB代码替换为等效的十六进制代码即可。
function decToHex(a) {
return ('00' + (+a).toString(16)).substr(-2);
}
function replaceRGB(str) {
return str.replace(/rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)/, function (_, r, g, b) {
return "#" + decToHex(r) + decToHex(g) + decToHex(b);
});
}
replaceRGB("color: rgb(255, 0, 0)") // "color: #ff0000"
答案 1 :(得分:0)
这是Node.prototype
https://developer.mozilla.org/En/DOM/Node.cloneNode
Node.prototype.cloneNode = function() {}
但是,修改内置对象可能会让您感到悲伤。如果可能,您应该创建一个不同的函数并使用它,这样,使用cloneNode
的现有代码不会中断。
答案 2 :(得分:0)
这一系列小提琴正在进行中,但它重新实现了cloneNode的功能。 http://jsfiddle.net/beCVL/19/
截至4月4日,美国东部时间上午10:53,它需要使用IE,因为IE没有Node对象。
注意,在IE中,原型函数不能被覆盖。因此,cloneNode的所有实例都必须由确定要使用哪个版本的cloneNode的函数替换。