2010-05-04 91 views
1

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

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

我现在想扩展它。我所拥有的结构是每个分支可能(或不可能)都有子分支附属的树。我想要发生的事情是,递归调用JQuery加载命令,直到没有孩子附加到它为止。类似以下步骤:

  1. 调用Jquery加载函数将内容加载到'content'div。
  2. 如果负载函数返回的孩子再次附着
  3. 呼叫JQuery的负载功能,让孩子们
  4. 重复步骤2和3,直到没有孩子都可用。

有没有人在JQuery中做过这件事,或者知道一个插件可以处理这个问题?

感谢

回答

3

加载内容递归可以用这个原则来实现:

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

loadTree($('#content')); 

你叫一个jQuery对象的功能。它遍历对象中的元素并为每个元素调用加载。在成功回调中,它会挑选已加载代码中的子代并自行调用。

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

+0

对于最后的评论比+1更多,这对用户来说是更好更快的体验。 – 2010-05-04 11:40:18

+0

@Guffa。目前我已经设置好了将整个列表作为一个呼叫返回,但取决于树的下降程度,负载可能需要很长时间才能加载。这就是为什么我想把它分割成个人电话,这样至少会在屏幕上显示一些信息,而其余的信息会在屏幕上显示出来。 – John 2010-05-04 12:06:12

+1

@John:你可以制作一个组合并从开始只加载第一个级别,然后减少您可以使用它的所有子节点加载节点的请求数,而不是分别加载每个节点。你是否需要从开始加载整个树,或者你可以让节点未扩展并在用户扩展它们时加载它们? – Guffa 2010-05-04 12:50:47