使用jQuery(或简单的JS)添加新的DOM元素

时间:2009-05-21 17:06:48

标签: jquery ajax dom events hook

要明确:我不是在问如何将现有的钩子放到新的DOM元素上。我知道live()函数和旧的livequery插件。我在问别的什么。

我想知道的是如何挂钩新DOM元素的创建。我问的原因是我正在创建一个无法控制第一方脚本的第三方用户JS脚本。这些第一方脚本(经过混淆)通过添加新的DOM元素定期更新页面。我希望在添加这些元素后执行代码。

使用$('...')。bind('ajaxSuccess',function().....)适用于一些添加,但不是全部。

3 个答案:

答案 0 :(得分:2)

如果始终使用document.createElement方法添加它们,您只需替换它并在那里进行跟踪。

document.replacedCreateElement = document.createElement;
document.createElement = function(tagName) {
    this.replacedCreateElement(tagName);
    //do your tracking  
}

答案 1 :(得分:1)

我不知道为什么你问你是否知道livequeryLivequery将允许您挂钩任意新的DOM元素。除此之外,我唯一知道的就是挂钩DOM方法(比如appendChild等......)

集成到jQuery中的live()函数实际上并不是完整的livequery实现。 (Resig认为,如果不将代码大小过多地进行集成,功能太多了)

在live()中,缺少的是以下类型函数:

$('*').livequery(function() {
 // do something
});

使用它,它应该捕获任何添加物。

答案 2 :(得分:1)

嗯,我选择了这一对,它似乎在20秒或更短的时间内触发了所需的DOM更新:

$( '#someid' ).bind( 'ajaxSuccess', function() { ... } );
$( '#someid' ).ajaxSuccess( function( e, r, s ) { ... } );

我宁愿不依赖livequery来减慢页面加载速度,而且replaceCreateElement解决方案会破坏CPU。