【问题标题】:loaded div not yet in DOM加载的 div 尚未在 DOM 中
【发布时间】:2011-01-27 12:29:41
【问题描述】:

我正在使用 jQuery load() 函数从一个 div 中加载一些内容到另一个 div 中。它可以显示在浏览器上,但是当我尝试使用函数 find() 时,它什么也没找到,因为它还没有出现在 DOM 中。我已经尝试在加载后和使用 find() 之前打印出 div 的 HTML 内容(包含加载内容的内容) - 它显示了 div 之前的 HTML 和内容已加载。

所以问题是,如果加载的内容还没有在 DOM 中,我如何在加载的内容中查找某个 id?

也许我可以通过 live() 和自定义事件来解决这个问题?

这里有一些非常简化的代码:

$('#serverctl-server-dc').load('query.php?m=serverctl&q=shelf_view');
console.log($('#srv-1111').html());

生成的源代码确实包含#srv-1111 元素,并且确实包含html。不过,我在控制台中没有得到任何东西。

【问题讨论】:

  • 如果您可以分享/显示有用的代码。

标签: jquery dom load find


【解决方案1】:

“加载”是异步的。您应该将处理放在加载请求的回调函数参数中。只有这样,您才能确定 DIV 的内部元素可用。

是的,如果您想处理新元素上的事件,您可以使用“live()”。如果您只想操作新元素(除了使用 CSS 设置样式),例如用其他东西替换一些文本,或者为它们设置动画,你需要等待它们被加载。

【讨论】:

  • +1.. 使用回调确实是正确的方法,并且在官方页面api.jquery.com/load中明确记录了“提供的回调,如果有的话,在执行此后处理后执行"
【解决方案2】:

原则上它应该找到您的元素,但您需要验证您的操作顺序。

您具体什么时候使用 find 功能?

使用 Chrome 开发者工具,因为它会显示当前操作的 html,而不是加载的原始文件。

如果需要更多解释,请发布您的代码。 祝你好运!

【讨论】:

    【解决方案3】:

    您可以使用 firebug 和调试脚本。加载内容后,搜索 id 以查看它是否真的存在。

    HTH

    【讨论】:

      【解决方案4】:

      我需要操作 $('#srv-'+maskId) 元素,所以我实现的东西很神奇 - 至少对我来说:

      $('#serverctl-server-dc').live('getId', function(){
          $('#srv-'+maskId).parent().css('border','4px solid #AF0200');
      });
      
      $('#serverctl-server-dc').load('query.php?m=serverctl&q=shelf_view', function(){
          $('#serverctl-server-dc').trigger('getId');
      });
      

      【讨论】:

        猜你喜欢
        • 2012-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-12
        • 2020-08-11
        • 2023-03-27
        相关资源
        最近更新 更多