2009-05-21 50 views
2

要清楚:我不問如何把現有的掛鉤到新的DOM元素。我知道live()函數和舊的livequery插件。我在問別的東西。掛鉤添加新的DOM元素與jQuery(或純JS)

我想知道的是如何掛鉤創建新的DOM元素。我問的原因是我創建了第三方用戶JS腳本,它無法控制第一方腳本。這些第一方腳本(被混淆)通過添加新的DOM元素定期更新頁面。我想在添加這些元素後執行代碼。

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

回答

1

我不確定你爲什麼問你是否知道livequeryLivequery將允許你鉤入任意新的DOM元素。除此之外,我唯一需要做的就是掛鉤DOM方法(例如appendChild等)。

集成到jQuery中的live()函數實際上並不是完整的livequery實現。 (Resig的認爲這是過多的功能,而不吹代碼尺寸漲過頭是一體的)

在現場(),現在缺少的是以下類型的功能:

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

使用此,它應該抓住任何補充。

+0

你可以擴展嗎?是否有超過新的1.3 live()函數的livequery功能? – Pistos 2009-05-21 17:11:57

+0

以示例更新。 – cgp 2009-05-21 17:24:53

2

如果他們總是添加document.createElement方法,您可以簡單地替換它,並在那裏做你的跟蹤。

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

好了,我這雙,這似乎火20秒或更少內所需的DOM更新去:

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

我寧願沒有通過依賴於對網頁加載速度緩慢livequery,並且replacementCreateElement解決方案對CPU進行了衝擊。