我有一组要异步加载的内容 URL,例如
var toLoad = ['snippet1.html', 'snippet2.html', ... ];
我正在尝试使用 AJAX 加载每个片段并将其附加到 parent <div>
,保持数组中内容的顺序。由于我的其余代码的设置方式(以及出于性能原因),我不想以同步方式加载,无论是通过调用async:false
还是通过链接.ajax()
调用,正如对类似问题的回答中所建议的那样。相反,我想将逻辑放入 AJAX 回调函数中,以根据索引正确放置加载的片段。
以下代码有效:
var $parent = $('#mydiv');
toLoad.forEach(function(url, i) {
// load snippet
$.get(url, function(snippet) {
// attach order to DOM element
snippet = $(snippet).data('order', i);
// find the sibling with the next lowest order number
var $prev = $parent
.children()
.filter(function() {
return $(this).data('order') < i
})
.last();
if ($prev[0]) snippet.insertAfter($prev);
else $parent.prepend(snippet);
});
});
……但我不喜欢它。特别是,我不喜欢用 ; 将订单附加到 DOM 元素上.data()
。这看起来很难看,如果我能帮上忙,我宁愿不要把它放到 DOM 中。
有没有更好的方法来实现将内容异步加载到具有预定义顺序的 div 的目标?