如何检测jQuery中的新元素创build?

比方说,我有以下代码返回一个页面上的锚点元素的数量:

function getLinkCount() { alert("Links:" + $("a").length); } 

如果我打电话准备文件,它会按预期工作。 但是如果现在一个新的链接通过JavaScriptdynamic地插入页面,我怎么能得到通知再次运行链接计数器function? (我无法控制可以创build新链接的脚本)。

基本上我正在寻找类似于live()东西,只有这样才会观察元素创build事件,例如:

 $("a").live("create", getLinkCount); 

当一个新的元素被创build时会触发。

您可以使用.livequery()插件来执行此操作,它会为每个元素(包括新元素)运行,如下所示:

 $("a").livequery(getLinkCount); 

不过,这个插件已经过时了,不推荐用于当前版本的jQuery。

在创build元素时通常会更容易,例如,如果您在AJAX请求之后执行此操作,那么.ajaxComplete()处理程序可能是个不错的地方,例如:

 $(document).ajaxComplete(getLinkCount); 

这将在每个请求之后运行,并且由于您通常在您的success处理程序中创build元素,所以在完成处理程序运行时它们已经存在。

您可以使用DOMSubtreeModified事件。 例如:

 $(document).bind('DOMSubtreeModified',function(){ console.log("now there are " + $('a').length + " links on this page."); }) 

您可以使用为了完全相同的目的而开发的arrive.js库(它在内部使用MutationObserver )。 用法:

 document.arrive('a', function(){ // 'this' refers to the newly created element var newElem = this; });