一种覆盖HTMLElement上的构造函数的方法,以便我可以添加自定义代码

时间:2009-07-22 15:55:55

标签: javascript

我试图以某种方式覆盖HTMLElement的构造函数(特别是HTMLDivElement),这样无论何时通过任何方式创建,我都可以运行一些自定义逻辑。

显然这不起作用:

HTMLDivElement.prototype.constructor = function()
{
  alert('div created!');
}

有没有办法解决这个问题?即使有一种方法可以在创建新元素(不是页面源HTML的一部分)时获得某种事件/触发器,这将有所帮助。

编辑:也许我们可以用Mozilla的手表/非手表方法来观察变化吗?

6 个答案:

答案 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)

您不是在控制所述元素的更改/创建吗?为什么不能在创建每个元素后手动执行任何操作?