使用jQuery,如何在添加新元素时使用“实时”方法发出警报?

时间:2011-07-03 17:42:50

标签: javascript jquery dom-manipulation

首先,我不想让另一个插件执行此操作... jQuery已经具有使用live()方法执行99%所需功能的功能。

基本上,我想改变这个:

$(".some-button").live("click", function() { alert('yay!'); });

进入这个:

$(".some-button").live(function() { alert('yay!'); });

所以,我所说的是,当一个元素被添加到页面时,我想立即激活一个方法... jQuery已经可以这样做了SOOO关闭因为它是如何添加的甚至在上面的例子中也是“点击”!

如何在不添加其他插件的情况下实现此目的,而只是使用与“live”和“die”方法相同的功能?

3 个答案:

答案 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.
});