我试图以某种方式覆盖HTMLElement的构造函数(特别是HTMLDivElement),这样无论何时通过任何方式创建,我都可以运行一些自定义逻辑。
显然这不起作用:
HTMLDivElement.prototype.constructor = function()
{
alert('div created!');
}
有没有办法解决这个问题?即使有一种方法可以在创建新元素(不是页面源HTML的一部分)时获得某种事件/触发器,这将有所帮助。
编辑:也许我们可以用Mozilla的手表/非手表方法来观察变化吗?
答案 0 :(得分:8)
我要去见地狱:
document.createElement = (function (fn)
{
return function (tagName)
{
var elem = fn.call(document, tagName);
alert('just created a new ' + elem.tagName);
return elem;
};
})(document.createElement);
答案 1 :(得分:2)
如果您可以考虑使用jQuery,则会有一个名为Livequery的插件,它允许您触发尚未创建的元素上的事件。所以上面的例子可以写成:
$("div").livequery('load', function(event) {
alert('div created!');
});
请注意,我自己没有尝试过livequery,但我猜是因为这个问题没有答案。
希望它有所帮助!
答案 2 :(得分:1)
执行此操作的标准方法是使用Mutation Observers
答案 3 :(得分:0)
如果你不介意使用prototype.js,这个答案可能有所帮助。
$('placeholder')。insert(new Element(“img”,{id:'something',src:myImage,onload:'('+ function(){alert(“MOO”);} +' )()'}));
答案 4 :(得分:0)
我不确定你是否可以在javascript中的每个新对象的每个调用中创建一个“钩子”... 但我很确定你可以建立自己的框架,一切都将被捕获.. 我建议看看: http://code.google.com/p/joose-js/
或易于阅读文章: http://www.sitepen.com/blog/2008/03/18/javascript-metaclass-programming/
python有__new__
和__init__
作为构建类的步骤..检查javascript如何处理新对象的构造会很好。
答案 5 :(得分:0)
您不是在控制所述元素的更改/创建吗?为什么不能在创建每个元素后手动执行任何操作?