如何检测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; });