繁体   English   中英

jquery DOM变异

[英]jquery DOM mutation

我做了这个:

<span class="a">test 1</span><div></div>

为什么.b不会激活警报?

$( ".a" ).click(function() { 
$('div').html('<span class="b">test 2</span>');
});

$( ".b" ).click(function() {
alert("Hello");
});

我不明白如何检测DOM的突变。

选择器在执行时运行,这意味着在加载页面时已经搜索了.b ,而不是在添加dom之后。

为了演示选择器如何在线运行,如果在追加元素后立即定义代码,则代码可以正常工作:

 $( ".a" ).click(function() { $('div').html('<span class="b">test 2</span>'); $( ".b" ).click(function() { alert("Hello"); }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <span class="a">test 1</span><div></div> 

但是 ,正确的方法是定义基于父的选择器。 以下是将单击事件设置为过滤.b选择器的target的父项。

 $( ".a" ).click(function() { $('div').html('<span class="b">test 2</span>'); }); $(document.body).on("click", ".b", function () { alert("Hello"); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <span class="a">test 1</span><div></div> 

因为.b是在查询完成后创建的。 当你在脚本中调用$(".b") ,找不到任何内容,并且没有附加click事件。 您可以通过将事件附加到文档来解决它,如下所示:

$(document).on("click", ".b", function () {
  alert("hello");
});

您正在使用的click()绑定称为“直接”绑定,它只将处理程序附加到已存在的元素。 它不会受到将来创建的元素的约束。 为此,您必须使用on()创建“委托”绑定。

$('div').on("click", ".b", function () {
  alert("hello");
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM