jQuery livequery插件的替代方案是什么?

7
我需要检查一个元素是否存在,我正在执行以下操作:
$('#obj').livequery(function() { ... });

我该如何使用实时方法或其他方式来完成它?

它是你动态生成的东西(多次生成?)还是在页面加载时出现的?(即,你可以只使用 $(document).ready(...); 吗?) - Rup
我将使用JavaScript动态生成'#obj'。 - Codnickers453
我不知道为什么,但当我在某个元素中使用fadeIn()时,livequery插件就无法工作了,因此我想寻找一个新的替代方案。 - Codnickers453
4个回答

2
这是一个老问题,但为了记录,这里提供我的观点:
除了使用livequery之外,另一种方法是使用“发布/订阅”方法,例如使用此实现: jQuery Tiny Pub/Sub:jQuery的一个非常非常非常小的Pub / Sub实现。 例如,我使用它的方式如下:
// 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();
});

+信息: 理解发布/订阅模式以提高JavaScript可扩展性

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');

好的,作为使用livequery的替代方案,当您将元素淡入页面时,您可以自己运行该函数。 - Rup
1
@Rapososoo:这是使用livequery的替代方案。如果您不希望livequery自动执行此操作,则需要手动编写代码,这在我的看法中是更好的实践方式。 - user113716
2
问题在于有多个点击会创建相同的元素。Livequery非常好,因为你关注的是被创建了什么,而不是谁创建了它。 - TruMan1

1
作为livequery插件的替代方案,您可以考虑使用$.whenLive jQuery插件: $.whenLive允许您跟踪一个或多个元素的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);

0

这是一个老问题,但我很惊讶居然没有答案,因为它很简单。你必须使用on()并将事件附加到父元素或body上。例如:

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

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

请注意,DOMNodeInserted 仅适用于 IE9+。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接