Javascript 绑定";“插入到DOM事件中”;对于尚未附加的元素

Javascript 绑定";“插入到DOM事件中”;对于尚未附加的元素,javascript,jquery,dom,Javascript,Jquery,Dom,我在找这样的东西: var div = document.createElement('div'); div.id = 'proprioceptiveDiv'; $(div).on('appendedToDOM', function() { // ... }); document.body.appendChild(div); // triggers above handler 这是否存在?我正在使用jQuery,不想仅仅为了这个功能而导入整个插件或另一个库,所以我只对一个简短的解决方案感

我在找这样的东西:

var div = document.createElement('div');
div.id = 'proprioceptiveDiv';
$(div).on('appendedToDOM', function() {
  // ...
});

document.body.appendChild(div); // triggers above handler
这是否存在?我正在使用jQuery,不想仅仅为了这个功能而导入整个插件或另一个库,所以我只对一个简短的解决方案感兴趣。

您可以使用,但在DOM事件规范中,事件被标记为不推荐,因为API的设计有缺陷

MutationEvent接口是在DOM级别2事件中引入的,但尚未在用户代理之间完全和可互操作地实现。此外,有人批评说,设计的接口会带来性能和实现方面的挑战。DOM4提供了一种新的机制,它使用了一个MutationObserver接口,该接口解决了突变事件解决的用例,但性能更高。因此,本规范描述了用于参考和遗留行为完整性的突变事件,但不推荐使用MutationEvent接口

一个简单的选项是使用
.trigger()
方法:

var $div = $(div).on('appendedToDOM', function() {
  console.log('appended');
});

// ...

$div.appendTo('body').trigger('appendedToDOM');
还可以创建附加元素并触发自定义事件的帮助器函数:

function append(elem, target, cEvent) {
   if (typeof target === 'undefined') var target = document.body;
   if (typeof cEvent === 'undefined') var cEvent = 'appendedToDOM';
   $(elem).appendTo(target).trigger(cEvent);
}

// Usage
append(element [, targetElement] [, customEvent]);

@Undefined的回答给了我一个想法。由于不推荐使用突变事件,这不是一个很好的解决方案,但无论如何:

$(document).bind("DOMNodeInserted", function(e) {
  $(e.target).trigger('appendedToDOM');
});

我更喜欢通用的,而不是每次都写触发器('appendedToDom')time@MarkVayngrib在将元素添加到document@JanDvorak好的,在这种情况下,有没有自定义事件的解决方案?如果没有更好的解决方案,我会接受这个答案。理想情况下,我想要一个不需要使用特殊append方法的解决方案,因为这需要我更改所有现有的代码以使用它,更不用说在$().html()或直接设置el.innerHTML的地方搜索代码。@MarkVayngrib如果你真的很绝望,让自己依赖于浏览器,并使用变异观察者来回退变异事件。。。或者直接使用不推荐的突变事件。如果你这样做了。。。欢迎来到浏览器依赖地狱的世界。它的可能副本看起来不像是标准事件。您是在尝试触发自定义事件,还是只是在DIV连接到DOM之前尝试延迟执行?@DGS区别在于我想为特定元素将处理程序绑定到此事件,而不是捕获每个“附加”事件并与我的DIV交叉检查。我已经看到了建议的重复问题,这里接受的答案似乎对这种情况没有帮助。@JC是的,我想在这个元素附加到DOM时触发一个自定义事件,可能只为这个DIV编写一个特殊的方法,它触发事件并进行附加,例如
DIV.appendAndNotify=function(){}
当您准备好附加它时,就调用它?可能不雅观,但它可能会满足您的需求。不错,但请注意,
DOMNodeInserted
在IE9中无法正常工作(但是,
domsubtreemeding
)。