1

これは私がこれまでに持っているものです: http://jsfiddle.net/beCVL/5/

これは、デフォルトの cloneNode をオーバーライドしようとしている方法です: Object.defineProperty(Object.prototype, "cloneNode", { get: cloneNode2, set: cloneNode2 });

しかし、それは機能していないので、Object.prototype には cloneNode がないと思いますが、Element.prototype にもありません。

では、メソッドが正しいと仮定すると、cloneNode をオーバーライドするにはどのクラスを使用する必要があるでしょうか?

4

3 に答える 3

0

この一連のフィドルは進行中の作業ですが、cloneNodeの機能を再実装します。http://jsfiddle.net/beCVL/19/

4月4日午前10時53分ESTの時点で、IEにはNodeオブジェクトがないため、IEで動作する必要があります。

IEでは、プロトタイプ関数をオーバーライドできないことに注意してください。したがって、cloneNodeのすべてのインスタンスは、使用するcloneNodeのバージョンを決定する関数に置き換える必要があります。

于 2012-04-04T14:53:26.827 に答える
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 コードを同等の 16 進コードに置き換えるだけで十分簡単です。

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 に答える