我正在尝试覆盖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?
答案 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);
};