使用jQuery无法找到动态添加的HTML元素

Cha*_*son 5 html jquery

我正在用HTML实现树形浏览器.在单击节点时,我调用一个添加节点的子元素的函数.到现在为止还挺好.我现在想立即调用其中一个子元素的click处理程序来扩展它.我的问题是jQuery找不到刚刚添加的子元素.当我在调试器中单步执行时,我会在浏览器呈现新元素之前调用我的代码来查找元素,我猜这是问题所在.

是否有一些我可以等待的事件(类似于onload)可以标记新添加的HTML何时可见?或者我可以调用的方法强制渲染更早发生?欢迎大家提出意见.

注意:我已经意识到问题完全是我的错,而不是浏览器或jQuery.请参阅下面的答案.

Nic*_*ver 10

你可以使用.live()这个,将你的点击处理程序安装到它而不是.click()像这样:

$(document).ready(function() {
  //instead of $(".myTreeNode").click(....
  $(".myTreeNode").live('click', function() {
    //Do stuff
  });
});
Run Code Online (Sandbox Code Playgroud)

A .click()将事件处理程序绑定到它在执行时找到的元素,因此新元素没有处理程序. .live()而是在DOM级别监听点击以冒泡,所以如果现在或以后添加它们都无关紧要.在很多元素的情况下,对于每个元素,你也有事件处理程序而不是1,在几个元素之后,这也变得更有效.


Cha*_*son 1

我最终通过使用 setTimeout() 延迟我的代码直到渲染新元素来解决这个问题。但这不是一个理想的解决方案,因为我选择的超时时间相当任意。

我已经追根究底了。我调用的添加 HTML 的函数是通过回调异步执行的。因此,当我尝试查找新的 HTML 元素时,它们实际上还不存在。我现在更改了代码,因此回调还负责处理新添加的元素,从而保证它们会存在。