1

我正在使用 jquery 将行加载到表中,我想知道如何让它们一一加载;即第二个块应该只有在第一个块完成加载后才开始加载。

我的表看起来有点像这样:

<table id="dynamicTable">
  <thead>
    <tr>
      <th>Heading</th>
      ...
    </tr>
  </thead>
  <tbody id="1">
  </tbody>
  <tbody id="2">
  </tbody>
</table>

我的 jquery 看起来有点像这样:

$("table#dynamicTable tbody").each(function() {
  $(this).load("filethatgeneratestablerows.php");
});

(它比这更复杂一点,因为它基于 tbody id 生成内容,并且还包括一个复选框系统来选择您想要影响的 tbody 元素,但是一切正常,所以我已经将它剥离以制作我的实际问题更明显!)

4

3 回答 3

5
var bodies = $("table#dynamicTable tbody"),
    i = 0;

(function loadBody() {
   bodies.eq(i++).load("filethatgeneratestablerows.php", loadBody);
})();

这一次调用集合的每个索引的加载。完成一次加载后,它会loadBody使用递增的索引再次调用。

i大于最后一个时,.eq()将返回一个空的 jQuery 对象,因此序列将在那里结束。

于 2012-10-01T14:57:40.483 回答
1

您需要创建一个数组来存储各种 tbodies。从第一个开始并运行负载。完成后,将第一个取出的阵列通过。所以你像这样传递:

[1, 2, 3, 4] [2, 3, 4] [3, 4] [4] []

你继续调用一个加载函数,该函数接受一个数组,加载第一个元素,然后传递剩余的元素或不传递任何元素。

前任:

loadElement( $("table#dynamicTable tbody") );

function loadElement( $elements ) {
    $elements.load( "filethatgeneratestablerows.php",
            loadElement( $elements.filter(":gt(0)") ) );
}
于 2012-10-01T14:51:45.370 回答
0

你可以做一个

$("table#dynamicTable #1").load("filethatgeneratestablerows.php", function(event) {
     $("table#dynamicTable #2").load("filethatgeneratestablerows.php", function(event) {
        ....
     });
  });
});

未经测试,但你应该明白这一点

于 2012-10-01T14:51:37.763 回答