Skip to content Skip to sidebar Skip to footer

How Do I Override Javascript's Clonenode?

This is what I have so far: http://jsfiddle.net/beCVL/5/ This is how I'm trying to override the default cloneNode: Object.defineProperty(Object.prototype, 'cloneNode', { get: c

Solution 1:

It's a property of Node.prototypehttps://developer.mozilla.org/En/DOM/Node.cloneNode

Node.prototype.cloneNode = function() {}

However, modifying built in objects may give you grief in the future. If possible, you should create a different function and use that instead, that way, existing code that uses cloneNode won't break.

Solution 2:

Try using:

Node.prototype.cloneNode = cloneNode2;

Object.defineProperty is not used for this purpose. Here's an example of a use for it:

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'

Apparently, this only works in Chrome.

To solve the actual problem, it should be simple enough to just replace the RGB codes with its equivalent hex code.

functiondecToHex(a) {
    return ('00' + (+a).toString(16)).substr(-2);
}
functionreplaceRGB(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"

Solution 3:

This series of fiddles is a work in progress, but it reimplements cloneNode's functionality. http://jsfiddle.net/beCVL/19/

as of April 4th, 10:53am EST, it needs to work with IE, as IE doesn't have a Node object.

Note, that in IE, prototype functions can't be overridden. So, all instances of cloneNode have to be replaced by a function that determines which version of cloneNode to use.

Post a Comment for "How Do I Override Javascript's Clonenode?"