Jquery多维数组
我正在创建一个应用程序,用户填写徽标的所有信息并将其添加到列表中,然后可以添加更多徽标或删除它们。 想象一下,我在列表中添加了一个徽标,其中包含以下信息:
名称:百事可乐
位置:正面,背面
尺寸:90mm,60mm
颜色:红色,蓝色,白色
选项:Whitebg
评论:这是一个很酷的标志。
该数组将是:
logos[logo[name, loc[], dim[], col[], opt[], com]]
现在我可以这样做来检索一些信息:
logos[0][0] //Prints "Pepsi" logos[0][1][0] //Prints "Front" logos[0][2][1] //Prints "60mm"
现在出现了问题。 每当用户完成所有信息并添加徽标列表时,我想清空除主“徽标”之外的所有arrays,以便用户可以向列表中添加另一个徽标。
我试图在“添加”按钮function结束时清空“徽标”数组:
logo.length = 0;
但是现在主arrays“logos”包含一个“logo”数组,其中是空的。 我想在那里保留那些信息。
我想你可以用不同的方式来看待它。 我想你应该有一个主要的标识数组。 还有一个徽标对象。
徽标对象。
function Logo(name,loc, dim, col, opt, com){ return { name:name, loc:loc, dim:dim, col:col, opt:opt, com:com } } var logos = []; logos.push(Logo("blah",somthing[],else[]....);
然后参考:
logos[0].name; logos[0].dimensions[0];
….
你可以添加另一个……
logos.push(Logo("another",....));
另外一个选项
和以前一样。
但不是Logos []而是使用Logos = {}对象。
您可以通过这样的给定输入动态添加属性。
Logos["First"] = Logo(loc,dim,col,opt,com); Logos["Second"] = Logo(loc2,dim2,col2,opt2,com2);
如果用户输入他们想要的“First”徽标。
您可以使用
var firstlogo = Logos["first"]; firstlogo.loc[0] etc.
玩弄它,使用对象可以更好地理解您正在处理的数据,尤其是当多维数组不是“必需”时
我想你想要这样做:
var tempLogo = new Array(); tempLogo[0] = logos[0]; // or the logo you have choose // Clear the logo logos.clear(); // Set the logos with the tempLogo value logos = tempLogo;
最后,我使用对象而不是数组作为“Bodman”建议。 工作得更好,更简单。
HTML:
Title
CSS:
body { padding: 50px; } p { margin: 10px 0; } label { float: left; width: 100px; } input { margin: 0 } ul input[type="checkbox"]{ float:left; } ul { list-style: none;} li { margin: 10px 0; } li div { margin-left: 20px; } h2 { font: bold 14px Arial; margin-bottom: 5px; }
jQuery的:
$(function(){ function logo(name, loc){ var locSize = loc.length; return { name: name, loc: loc, locSize: locSize } } var logos = []; $("#add").click(function(){ var name = $("#name").val(); var loc = []; $("input[name='loc']:checked").each(function(){ loc.push($(this).val()); }); logos.push(logo(name, loc)); $("#results").children().remove(); $.each(logos, function(n){ $("#results").append("" + logos[n].name + " Locations(" + logos[n].locSize + "): " + logos[n].loc.join(", ") + "
"); }); }); $("#del").click(function(){ $("#results input[type='checkbox']:checked").each(function(){ var index = $(this).closest("li").index(); logos.splice(index, 1); $(this).closest("li").remove(); }); });