首先,我不想让另一个插件执行此操作... jQuery已经具有使用live()
方法执行99%所需功能的功能。
基本上,我想改变这个:
$(".some-button").live("click", function() { alert('yay!'); });
进入这个:
$(".some-button").live(function() { alert('yay!'); });
所以,我所说的是,当一个元素被添加到页面时,我想立即激活一个方法... jQuery已经可以这样做了SOOO关闭因为它是如何添加的甚至在上面的例子中也是“点击”!
如何在不添加其他插件的情况下实现此目的,而只是使用与“live”和“die”方法相同的功能?
答案 0 :(得分:4)
以下是我复制和粘贴的一些代码,似乎在小提琴中起作用,至少在FF上:http://jsfiddle.net/KQBzn/
$(document).bind('DOMNodeInserted', function(event) {
alert('inserted ' + event.target.nodeName + // new node
' in ' + event.relatedNode.nodeName); // parent
});
来源:http://forum.jquery.com/topic/how-to-get-notified-when-new-dom-elements-are-added
答案 1 :(得分:2)
没有任何跨浏览器的方法可以做到这一点,并且jQuery本身没有任何内容允许它。
您必须使用插件,或者只是手动管理新元素的调用代码。
live()
[docs]方法和delegate()
[docs]方法仅用于事件处理。您提供的代码只会响应浏览器事件,而不会响应DOM操作。
.live()
不会这样做的原因是因为在向DOM添加新元素时它不会运行任何代码。它不监视任何DOM更改。而是它响应于冒泡到document
的事件,并在它与你给它的选择器匹配时调用处理程序。
答案 2 :(得分:0)
你无法使用.live()方法。
似乎jQuery应该为.live()方法添加一个功能,这样如果它与特定关键字一起使用,比如'created'而不是事件名,那么它将让你为创建的元素执行一个函数。那太酷了!例如,理想的情况是这样的:
$('.foobar').live('created', function() {
// do something with each newly created .foobar element here.
});