替代jQuery livequery插件?

时间:2011-07-01 18:19:00

标签: jquery livequery

我需要检查元素何时存活,我正在做:

$('#obj').livequery(function() { ... });

我如何使用实时方法或其他方式来实现?

4 个答案:

答案 0 :(得分:2)

这是一个老问题,但是为了记录,这里是我的5美分:


livequery的替代方法是使用Publish/Subscribe方法,例如此实现 jQuery Tiny Pub/Sub: A really, really, REALLY tiny pub/sub implementation for jQuery.

我以这种方式使用它:

// inform of DOM change (mostly through AJAX)
$.publish("/table/loaded");

// re-execute plugin
$.subscribe("/table/loaded", function(e, data) {
    $("#my_id input[name='date']").datepicker();
});

+ info:Understanding the Publish/Subscribe Pattern for Greater JavaScript Scalability

答案 1 :(得分:1)

如果您的代码是将元素添加到DOM中,那么在创建它时在其上运行代码:

$('body').append('<div id="obj">some new object</div>');

var obj = $('#obj');

obj.runSomeCode();

...或者您甚至可以在添加之前执行此操作:

var obj = $('<div id="obj">some new object</div>');

obj.runSomeCode();

obj.appendTo('body');

答案 2 :(得分:1)

作为livequery插件的替代品,您可以查看$ .whenLive jQuery插件:

$ .whileLive允许您跟踪一个或多个元素的DOM树插入。

http://bitcubby.com/tracking-the-insertion-of-javascript-components-into-the-dom/

以下是该页面的示例:

var widget = $("<div>I am a nobody. Nobody is perfect. Therefore, I am perfect.</div>");
$(widget).onLive(function() {
    // Awesomesauce.
    var height = $(this).height();
    var width = $(this).width();
});
$("body").append(widget);

答案 3 :(得分:0)

这是一个古老的问题,但我很惊讶没有答案,因为它很简单。您必须使用on()并将事件附加到父级或正文。例如:

$('#obj').livequery('click', function() { ... });
$('#obj').livequery(function() { ... });

成为

$('body').on('click', '#obj', function() { ... });
$('body').on('DOMNodeInserted','#obj', function() { ... });

请注意,DOMNodeInserted是IE9 +