JQuery一旦创建就附加到父级

时间:2016-05-05 13:07:00

标签: javascript jquery dom event-handling

我想在创建$(e).append()后立即使用e

我知道我可以使用它:setTimeout(/*func checking if parent exists*/, 100)但我发现这是一个非常糟糕的主意。是否有某种DOM事件,当DOM元素的子树被修改时会触发?

我通常只是将其粘贴到源代码中,然后粘贴到创建父代的函数中,但实际上并不可能,部分原因是因为我实际上正在制作Chrome扩展程序。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

我会使用这个库来等待元素存在Arrive.js

// watch for creation of an element which satisfies the selector ".test-elem"
$(document).arrive(".test-elem", function() {
    // 'this' refers to the newly created element
    var $newElem = $(this);
});

// the above event would watch for creation of element in whole document
// it's better to be more specific whenever possible, for example
$(".container-1").arrive(".test-elem", function() {
    var $newElem = $(this);
});

正如您所看到的,它非常易于使用。如果您不想使用外部库,则需要查看JS中的MutationObserver,因为DOMNodeInserted已弃用。

解压缩库很容易,如文档中所示:

// unbind all arrive events on document element
$(document).unbindArrive();

// unbind all arrive events on document element which are watching for ".test-elem" selector
$(document).unbindArrive(".test-elem");

// unbind only a specific callback
$(document).unbindArrive(callbackFunc);

// unbind only a specific callback on ".test-elem" selector
$(document).unbindArrive(".test-elem", callbackFunc);

// unbind all arrive events
Arrive.unbindAllArrive();

答案 1 :(得分:0)

如果$(document).ready(function(){ //code here } 是某些静态HTML的一部分,那么您可以使用典型的:

e

如果代码动态添加DOMNodeInserted,您可以使用e事件。为了这个例子,我假设<li>$(document).on('DOMNodeInserted', 'li', function(){ //code here });

apc_u