要明确:我不是在问如何将现有的钩子放到新的DOM元素上。我知道live()函数和旧的livequery插件。我在问别的什么。
我想知道的是如何挂钩新DOM元素的创建。我问的原因是我正在创建一个无法控制第一方脚本的第三方用户JS脚本。这些第一方脚本(经过混淆)通过添加新的DOM元素定期更新页面。我希望在添加这些元素后执行代码。
使用$('...')。bind('ajaxSuccess',function().....)适用于一些添加,但不是全部。
答案 0 :(得分:2)
如果始终使用document.createElement方法添加它们,您只需替换它并在那里进行跟踪。
document.replacedCreateElement = document.createElement;
document.createElement = function(tagName) {
this.replacedCreateElement(tagName);
//do your tracking
}
答案 1 :(得分:1)
我不知道为什么你问你是否知道livequery。 Livequery将允许您挂钩任意新的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。