1

这就是我到目前为止所拥有的:http: //jsfiddle.net/beCVL/5/

这就是我试图覆盖默认克隆节点的方式: Object.defineProperty(Object.prototype, "cloneNode", { get: cloneNode2, set: cloneNode2 });

但它不起作用,所以,我认为 Object.prototype 没有 cloneNode,但 Element.prototype 也没有。

那么,假设我的方法是正确的,我需要使用哪个类来覆盖 cloneNode?

4

3 回答 3

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"
于 2012-04-03T21:35:59.750 回答
0

这是https://developer.mozilla.org/En/DOM/Node.cloneNode的属性Node.prototype

Node.prototype.cloneNode = function() {}

但是,修改内置对象可能会让您在未来感到痛苦。如果可能,您应该创建一个不同的函数并使用它,这样,使用的现有代码cloneNode不会中断。

于 2012-04-03T21:39:21.857 回答
0

这一系列的 fiddles 正在进行中,但它重新实现了 cloneNode 的功能。http://jsfiddle.net/beCVL/19/

截至美国东部时间 4 月 4 日上午 10:53,它需要与 IE 一起使用,因为 IE 没有 Node 对象。

请注意,在 IE 中,原型函数不能被覆盖。因此,所有 cloneNode 实例都必须替换为确定要使用哪个版本的 cloneNode 的函数。

于 2012-04-04T14:53:26.827 回答