关于ajax / javascript / jquery页面的数据结构的建议

时间:2011-03-22 13:20:56

标签: javascript jquery ajax arrays

这是一个JavaScript / Ajax网页(也使用jQuery)。

我有一个我需要显示的嵌套结构。显示顶级元素后,用户可以单击它,并查看其下方的级别(动态生成)。

我不想预先生成所有内容并使用display:none(页面很复杂,我正在简化此问题)隐藏它 - 我想从使用ajax获取的javascript数组构建显示

我的问题:

我有两个选择:

1:创建一个平面阵列:

[ {id: xx, children: [ xx, xx, .. ] }, ....]

然后,对于元素的onclick,我从数组中获取id,找到子节点,将它们从数组中拉出并显示它们。 (我想我必须搜索数组,因为javascript中没有关联数组 - 或者做一个索引。)

2:创建一个嵌套数组:

{ id: xx, children [ { id: xx, children : [....] }, {....} ] }

然后以某种方式将数组中的子节点绑定到元素上。

我对第二种方法有两个问题:

答:在我创建它时,我会不断地为每个孩子复制大块的数组。 (至少我认为我是。我需要使用深拷贝吗?我可以参考吗?)

B:我不确定如何将数据绑定到子元素。通常我使用带有onClicks的html字符串构建显示,然后追加整个事物。但onClicks只能获取ID,而不是数组的副本。

2 个答案:

答案 0 :(得分:0)

我更愿意使用第二种方法,因为它具有更好的结构,并且您可以在递归发挥作用时编写更少的代码。

你说你不确定如何将子元素绑定到数组而不实际创建dom元素,如果你对html使用<!DOCTYPE html>元素可以有html-*属性允许你存储数据在一个元素中,例如:

<ul id="lists">
    <li class="parent" id="root_22" data-children="{some object}">A Root Elelment</li>
</ul>

这种方法的问题在于你必须在子元素中存储子节点的每个子节点,这很可能是一个开销。

另一种方法是使用jQuery.data方法绑定数据,这将使DOM保持干净,但会将数据注入元素。

  

存储与指定元素关联的任意数据。

@see:http://api.jquery.com/jQuery.data/

答案 1 :(得分:0)

我最近做了类似的事情,我有一个非常大的嵌套结构(超过2000个节点) - 我不想批量附加到DOM。

我最终做的是获取ajax加载的数据并将其转换为嵌套结构......

<node id="1" title="a">
  <node id="2" title="b />
  <node id="3" title="b">
      <node id="4" title="d" />
  </node>
</node> etc...

...并将其存储为jQuery对象(节点),但从不将其附加到DOM。

然后我可以选择节点的直接子节点,因为我需要它们相对容易,转换为html元素并附加到DOM,添加数据等...

$("#"+ID+">node", nodes).each(function() { 
    var node = $(this);
    //do whatever... 
});

我不知道这是否是最节省内存的方法,但它确实很容易选择并根据需要将节点的直接子节点附加到DOM。