覆盖appendChild()

时间:2014-12-01 18:08:23

标签: javascript jquery

我正在尝试覆盖appendChild方法,这样我就可以控制动态创建的元素,并在插入页面之前根据需要修改它们。我尝试使用这个示例代码,只是为了看看它是否可以完成:

var f = Element.prototype.appendChild;
Element.prototype.appendChild = function(){f.apply(this, arguments); };

它适用于简单的例子。但是,当我尝试在此代码后加载jquery时:

<script> 
    var f = Element.prototype.appendChild;
    Element.prototype.appendChild = function(){f.apply(this, arguments); };
</script>

<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'></script>

我收到了这个错误:

Uncaught TypeError: Cannot read property 'selected' of undefined jquery.min.js:4
Uncaught TypeError: Cannot read property 'appendChild' of undefined

那么,为什么它不适用于jquery?有没有一种安全的方法来覆盖appendChild?

1 个答案:

答案 0 :(得分:2)

建议覆盖本机函数,但如果你这样做,请确保返回附加元素,以防止使用本机&#34; appendChild&#34;的返回值的代码出现问题。功能:

window.callbackFunc = function(elem, args) {
  // write some logic here
}
window.f = Element.prototype.appendChild;
Element.prototype.appendChild = function() {
    window.callbackFunc.call(this, arguments);
    return window.f.apply(this, arguments);
};