分布式javascript数组
我正试图想出一种方法,将分布式javascript数组,javascript,jquery,distribution,each,Javascript,Jquery,Distribution,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> 我计算每个ul可能包含的l
$内构建的数组中的数据附加到ul.featured list
<div id="home-page-featured">
<ul class="featured-list"></ul>
<ul class="featured-list"></ul>
<ul class="featured-list"></ul>
</div>
我计算每个ul
可能包含的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>
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);
}
});
$.ajax({
url:'/json/projects/'+(金额*3),
键入:“GET”,
成功:函数(回复、文本状态、jqXHR){
var项目=[];
$。每个(回复、功能(i、v){
if(v['gallery'][0])
{
console.log(v['gallery'][0]);
项目.推送(
“”
+''
+“ ”
);
}
});
console.log(项目);
}
});
现在剩下的唯一难题是,如何在我所有的ul.特色列表中重新分配li
s内projects
<div id="home-page-featured">
<ul class="featured-list"></ul>
<ul class="featured-list"></ul>
<ul class="featured-list"></ul>
</div>
假设每个ul.featured list
可能包含的最大li
s为10,那么如果projects
包含11个li
s,那么10将转到第一个ul.featured list
并在第二行继续,依此类推
我的想法:
$。对于ul
s的each()
将不起作用,因为将重复内容
- 我可以尝试将内容添加到第一个
ul
,当它达到数量时停止,并删除已经添加的内容,然后使用第二个ul
继续此过程,但我认为这不是一种优雅的方式
那么,你认为呢?你对解决这个问题有什么建议
更新
这是我目前使用的解决方案,但我觉得没有那么有效。。。如何进行优化?
我认为如果您保持代码的优化,您的解决方案是非常有效和可接受的。我的意思是,每次在循环中调用$('ul.featured list')
时,您可以将其缓存在某个变量中,然后使用该变量
或者,您可以将附加逻辑移动到另一个函数
中,并在循环
中调用该函数
,方法是以数组的形式传递它的元素和将这些项附加到的ul元素
对我来说,你已经朝着正确的方向前进了:-)
您可以在array
对象上使用slice
方法从array
中切片元素,同时仍保留原始array我认为如果您保持代码优化,您的解决方案是非常有效和可接受的。我的意思是,每次在循环中调用$('ul.featured list')
时,您可以将其缓存在某个变量中,然后使用该变量
或者,您可以将附加逻辑移动到另一个函数
中,并在循环
中调用该函数
,方法是以数组的形式传递它的元素和将这些项附加到的ul元素
对我来说,你已经朝着正确的方向前进了:-)
您可以在array
对象上使用slice
方法从array
中切片元素,同时仍保留原始array
尝试以下操作
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
});
});
var arrayToFill=[…];
$(“ul.list”)。每个(函数(索引){//循环遍历所有项
$(this).find(“li”).each(函数(索引){//循环遍历其中的所有- 项
$(this.html(arrayToFill.shift());//每回合填充并删除一个
});
});
示例:试试这个
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
});
});
var arrayToFill=[…];
$(“ul.list”)。每个(函数(索引){//循环遍历所有项
$(this).find(“li”).each(函数(索引){//循环遍历其中的所有- 项
$(this.html(arrayToFill.shift());//每回合填充并删除一个
});
});
示例:@w0rldart:我的荣幸。我已经更新了我的答案。请看一看。谢谢。@w0rldart:我的荣幸。我已经更新了我的答案。请看一看。谢谢。您的建议效率更高,因为编写的代码更少,但它有一个错误,即在从一个ul
交换到另一个li
时,将跳过要附加到li
的下一个数据。。。在本例中,它是银河
和hihihi
无论如何,我建议对您的答案进行编辑,使用不完整的工作版本。我的错误是,必须切换'while'子句中的参数,因此如果达到10,它将不会“移位”。现在它可以工作了,如果你已经阅读了我对你的帖子的建议,你会发现我不需要附加,我需要修改li
的值。。。这里的代码更糟糕。对不起,我是新来的。我在哪里可以找到这个建议?顺便说一句,我甚至不知道它的存在。你的建议,写的代码更少,效率更高,但它有一个错误,即在从一个ul
交换到另一个li
时,将跳过要附加到li
的下一个数据。。。在本例中,它是银河
和hihihi
无论如何,我建议对您的答案进行编辑,使用不完整的工作版本。我的错误是,必须切换'while'子句中的参数,因此如果达到10,它将不会“移位”。现在它可以工作了,如果你已经阅读了我对你的帖子的建议,你会发现我不需要附加,我需要修改li
的值。。。这里的代码更糟糕。对不起,我是新来的。我在哪里可以找到这个建议?顺便说一句,我甚至不知道它的存在。