我正试图想出一种方法,将$.each()
内构建的数据中的数据附加到ul.featured-list
<div id="home-page-featured">
<ul class="featured-list"></ul>
<ul class="featured-list"></ul>
<ul class="featured-list"></ul>
</div>
li
的内容如下:
<li>
<a href="http://local.site.com/chocolate-cakes/">
<img width="186" height="186" src="http://local.site.com/view/img/blank.jpg" />
</a>
</li>
我计算每个li
可能包含的ul
个,包含以下内容:
var amount = Math.floor($(document).width() / 186) + 2;
然后我获得了将使用ajax形成li
s的内容:
$.ajax({
url : '/json/projects/' + (amount * 3),
type : 'GET',
success: function(reply, textStatus, jqXHR) {
var projects = [];
$.each(reply, function(i, v) {
if(v['gallery'][0])
{
console.log(v['gallery'][0]);
projects.push(
'<li>'
+'<a href="/project/'+v['id']+'" title="'+v['name']+'">'
+'<img src="/data/images/'+v['gallery'][0].name+'" />'
+'</a>'
+'</li>'
);
}
});
console.log(projects);
}
});
现在唯一的困境是如何在li
projects
内的ul.featured-list
内重新分发这些li
假设每个ul.featured-list
可能包含的最大projects
为10,如果li
包含11 ul.featured-list
s,则10将转到第一个$.each()
1}}以及剩下的内容将在第二行继续,依此类推。
ul
ul
将无效,因为会重复内容
amount
,当它到达ul
时停止,并删除已经附加的内容并继续使用第二个{{1}}进程,但我认为这样做不会那么优雅那么,您怎么看?你有什么建议可以解决这个问题吗?
这是我正在使用的当前解决方案,但我觉得效率不高......如何进行优化? http://jsfiddle.net/nV5RU/9/
答案 0 :(得分:2)
试试这个
var arrayToFill = [...];
$("ul.list").each(function (index) { // loop through all <ul> items
$(this).find("li").each(function (index) { // loop through all <li> items inside
$(this).html(arrayToFill.shift()); // fill & delete one on each turn
});
});
答案 1 :(得分:1)
如果您保持代码优化,我认为您的解决方案非常高效且可以接受。我的意思是不是每次在循环中调用$('ul.featured-list')
而是将其缓存在某个变量中然后使用该变量。
或者您可以将附加逻辑移动到其他function
中,并通过以数组形式传递元素并在function
附加loop
来调用ul element
中的slice
那些项目。
对我来说,你已经朝着正确的方向前进: - )。
您可以使用array
对象上的array
方法对array
中的元素进行切片,同时仍然保留原始{{1}}。