【问题标题】:Recursive JQuery Load command递归 JQuery 加载命令
【发布时间】:2010-05-04 10:59:13
【问题描述】:

我正在使用 JQuery 将内容加载到 div 元素中,并且一切正常。

$("#content").load('www.urltogetcontentfor.com')

我现在想扩展它。我拥有的结构是一棵树,其中每个分支可能(或可能没有)附有子分支。我想要发生的是递归调用 JQuery 加载命令,直到没有子级附加到它为止。类似于以下步骤:

  1. 调用 Jquery 加载函数将内容加载到“内容”div 中。
  2. 如果加载函数返回子节点已附加
  3. 再次调用JQuery加载函数获取子节点
  4. 重复第 2 步和第 3 步,直到没有孩子可用。

有没有人在 JQuery 中做过这个或者知道处理这个的插件?

谢谢

【问题讨论】:

    标签: jquery jquery-load


    【解决方案1】:

    递归加载内容可以通过这个原理来完成:

    function loadTree($element) {
      $element.each(function(){
        this.load('url', function(){
          loadTree(this.find('.children'));
        });
      });
    }
    
    loadTree($('#content'));
    

    您使用 jQuery 对象调用该函数。它遍历对象中的元素并为每个元素调用 load。在成功回调中,它会在加载的代码中挑选孩子并调用自己。

    但是,如果可能,您应该尝试使用一个请求来获取整个树,例如以 JSON 格式返回数据并从中创建元素。

    【讨论】:

    • 最后一条评论比代码多+1,这对用户来说是很多更好更快的体验。
    • @Guffa。我现在已经将它设置为将整个列表作为一个调用返回,但根据树下降的级别,负载可能需要相当长的时间才能加载。这就是为什么我考虑将其拆分为单独的调用,这样至少会在屏幕上显示一些信息,而其余的会加载。
    • @John:您可以进行组合并从开始只加载第一级,然后为了减少请求的数量,您可以加载一个节点及其所有子节点,而不是单独加载每个节点。您是否需要从一开始就加载整个树,或者您可以不展开节点并在用户展开它们时加载它们?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多