Javascript 使用jquery对新创建的元素执行函数

Javascript 使用jquery对新创建的元素执行函数,javascript,jquery,Javascript,Jquery,当我动态添加一个新元素时,我想对它应用一些函数。例如,要将常规的转换为日期时间选择器(通过一些插件),我需要 $('.dt').dateTime(); 上述函数仅在我在初始化期间第一次添加元素时起作用。 当我以后使用.append()添加它们时,该函数将不被应用。对于事件侦听器,我使用$(document).on(): $(document).on('click', '.dt', function () {}); 而且它在任何情况下都有效 在创作中使用什么等价物 在上,我看到了类似问题的解决

当我动态添加一个新元素时,我想对它应用一些函数。例如,要将常规的
转换为日期时间选择器(通过一些插件),我需要

$('.dt').dateTime();
上述函数仅在我在初始化期间第一次添加元素时起作用。 当我以后使用
.append()
添加它们时,该函数将不被应用。对于事件侦听器,我使用
$(document).on()

$(document).on('click', '.dt', function () {});
而且它在任何情况下都有效

在创作中使用什么等价物

在上,我看到了类似问题的解决方案,要么使用现在已被弃用的function
.live()
,要么使用我不想要的某种插件

普通jquery中有什么解决方案吗?

根据您可以使用的

根据继承方法重写.live()方法非常困难 直截了当的这些是用于所有应用程序的等效调用的模板 三种事件附件方法:

我在中进行了尝试,当您在父元素上设置
.on
函数时,其中的所有元素(将来也会)都将附加此事件

$(.main”).on('click','.cl',function(){alert('clicked');});
$(“.add”)。单击(函数(){
$(“.main”).append(

Test

); });

添加

1

二,

3

四,


无法在jquery中侦听元素创建

为了在将元素添加到DOM时初始化某些内容,您有几个选项:

  • 使用MutationObserver,但是它没有最好的支持

  • 在添加元素后手动初始化插件(最佳匹配)

  • 另一种解决方案(关于@vxsx答案和插件行为的其他解决方案)可能是使用委派事件,例如,
    mouseenter
    并使用它初始化插件,例如:

    $(document).on('mouseenter', '.dt:not(.dt_initiliazed)', function () {
        $(this).addClass('dt_initiliazed').dateTime();
    });
    

    另一个解决方案是在特定元素
    .dt
    上设置一个假CSS动画/转换,并使用相关事件
    animationEnd/transitionEnd
    初始化插件。这甚至适用于以后在DOM中添加的元素。

    在一些使用jQuery的现代浏览器上,您可以尝试:

    $(document).on('DOMNodeInserted', '.dt', function(event) {
        $(event.currentTarget).dateTime();
    });
    
    此功能实际上已被弃用,因此我建议您遵循vxsx的答案,或者使用MutationObserver工具,或者最好在每次添加
    .dt
    元素时手动应用此功能。它不需要比实际设置事件侦听器更多的代码。

    您可以使用它来检测新的DOM元素并强制绑定这些新项


    您可以阅读以下内容:

    是否可以创建元素,调用插件函数,然后附加它?而不是直接追加?e、 g变量$dt=$('')$dt.dataTime()$('body')。追加($dt);也许插件可以处理委托。你能提供插件和JSFIDLE的链接吗?!jQuery在运行时只知道页面中的元素,因此jQuery无法识别添加到DOM中的新元素。为了防止这种使用,将事件从新添加的项冒泡到DOM中的某个点,当jQuery在页面加载上运行时,该点就在DOM中。许多人使用
    document
    作为捕获冒泡事件的地方,但没有必要在DOM树中占据那么高的位置。理想情况下,这并不能回答问题。我知道@xaxa希望将click callback设置为每个DOM元素:已经创建,这是动态创建的。我认为这可能会解决这个问题problem@suvroc在我的情况下,
    事件
    等于什么?(在创建元素时)实际上它看起来像您的
    $(文档)来自回答他不想添加点击事件,他的点击事件示例解释说他想绑定一个插件,类似于使用“on”绑定点击事件。插件不会在单击时启动,它应该在附加元素时应用于元素。
    
    $(document).on('DOMNodeInserted', '.dt', function(event) {
        $(event.currentTarget).dateTime();
    });