Javascript 循环遍历json子对象并对每个子对象执行操作;“元素”;
我是json数组/对象的新手。我正在尝试访问.json文件中的一些子对象。我已经尝试了这里的建议,但我一直得到“未定义”的结果。下面是.json--Javascript 循环遍历json子对象并对每个子对象执行操作;“元素”;,javascript,arrays,json,html-table,row,Javascript,Arrays,Json,Html Table,Row,我是json数组/对象的新手。我正在尝试访问.json文件中的一些子对象。我已经尝试了这里的建议,但我一直得到“未定义”的结果。下面是.json-- { “发援会课程”:[ { “Longtille”:“, “longDescript”:“ammo-29.html”, “atrrsLink”:“赢95+”, “delMeth”:“标准”, “sked”:[ { “classNumb”:“926”, “开始日期”:“4/16/2012”, “截止日期”:“2012年4月20日”, “位置”:“德克
{
“发援会课程”:[
{
“Longtille”:“,
“longDescript”:“ammo-29.html”,
“atrrsLink”:“赢95+”,
“delMeth”:“标准”,
“sked”:[
{
“classNumb”:“926”,
“开始日期”:“4/16/2012”,
“截止日期”:“2012年4月20日”,
“位置”:“德克萨斯州沃思堡NMC”,
“状态”:“已计划”,
“清空”:“可用性”
},
{
“classNumb”:“001”,
“开始日期”:“6/4/2012”,
“截止日期”:“6/8/2012”,
“地点”:“麦克莱斯特,好的”,
“状态”:“已计划”,
“清空”:“可用性”
},
{
“classNumb”:“920”,
“开始日期”:“2012年6月18日”,
“结束日期”:“2012年6月22日”,
“地点”:“洛杉矶贝尔查斯”,
“状态”:“已计划”,
“清空”:“类已满”
}
]}
]}
我一定是做错了什么。这是我的代码。最后,我尝试用每个“sked”对象构建表行。但是我在控制台中显示单个数据元素时遇到了问题。以下是我的尝试:
$('#content').on("click", "#catList tbody tr", function() {
var aData = oTable.fnGetData( this );
console.log( aData );
var scheduleData = aData.sked;
var catLink = 'catalog/' + aData.longDescript;
$('#fullDescript').load(catLink, function() {
if (!$('#fullDescript #offerings')) {
$('.enrollBTN').hide();
};
if ($(scheduleData).length > 0) {
$(scheduleData).each(function() {
for(var i = 0; i < scheduleData.length; i++) {
/*var startDate = aData.sked.startDate[2];
var endDate = aData.sked.endDate[3];
var location = aData.sked.location[4];
var classNumb = aData.sked.classNumb[1];
var status = aData.sked.status[5];
var emptySeats = aData.sked.emptySeats[6];*/
//var item = scheduleData[i];
console.log( aData.sked.startDate[2] );
var html = "<tr>";
html += "<td>" + item.classNumb + "<\/td>";
//console.log( aData.sked[1].classNumb );
/*html += "<td>" + scheduleData.endDate + "<\/td>";
html += "<td>" + scheduleData.location + "<\/td>";
html += "<td>" + scheduleData.classNumb + "<\/td>";
html += "<td>" + scheduleData.status + "<\/td>";
html += "<td>" + scheduleData.emptySeats + "<\/td>";*/
html += "<\/tr>";
//return scheduleData;
};
$('#schedule tbody').append($(html));
});
};
});
$('#content').hide();
$('#fullDescript').show();
});
$(“#内容”)。在(“单击”,“catList tbody tr”,函数()上{
var aData=oTable.fnGetData(this);
console.log(aData);
var scheduleData=aData.sked;
var catLink='catalog/'+aData.longscript;
$('#fullDescript').load(catLink,function(){
如果(!$(“#完整描述#产品”)){
$('.enrollBTN').hide();
};
if($(scheduleData).length>0){
$(scheduleData)。每个(函数(){
对于(变量i=0;i
非常感谢您的帮助。您似乎只需要每个循环或循环,而不是两个循环。在是否使用item=scheduleData[i]的问题上似乎也存在一些混淆。试试这个:
if ($(scheduleData).length > 0) {
for(var i = 0; i < scheduleData.length; i++) {
var item = scheduleData[i];
var html = "<tr>";
html += "<td>" + item.endDate + "</td>";
// ... etc
html += "</td>";
}
}
if($(scheduleData).length>0){
对于(变量i=0;i
作为一个PS,我建议研究一个JS模板工具,比如。这将允许您从显示模板中分离数据,从而消除解析代码。它看起来像这样:
var template = "{{#sked}}<tr><td>{{endDate}}</td><td>{{location}}</td></tr>{{/sked}}";
var html = "<table>" + Mustache.render(template, aData) + "</table>";
var template=“{{{sked}}{{endDate}}{{location}}{{/sked}}”;
var html=“”+Mustache.render(模板,aData)+”;
我一定是做错了什么
是的,你是
当您使用。每个
循环时,您通过此
关键字引用当前元素。因此,对于循环,您不需要。或者,如果您想要for
循环,则不需要。每个循环。在我看来,使用for
循环<代码>。在这种情况下,每个
都只是一个开销
更新:@dbaseman为您提供了所需的一切:)
更新2:请尝试以下代码。基本上与dbaseman相同,但是dbaseman的代码片段没有关闭
元素
if ($(scheduleData).length > 0) {
for(var i = 0; i < scheduleData.length; i++) {
var item = scheduleData[i];
var html = "<tr>";
html += "<td>" + item.endDate + "</td>";
// ... etc
html += "</tr>"; // should close the <tr> here
}
}
if($(scheduleData).length>0){
对于(变量i=0;i
dbaseman,感谢您的教育。我知道我投入太多了。我的问题似乎比我想的要简单。但当我付诸行动时,我注意到了一个问题。我只看到最后一个sked项目被渲染。我通过注释掉.json文件中最后两个sked对象证明了这一点。重新运行我的应用程序。现在它只渲染了第一个sked对象。所以在某个地方,我错过了一个外环,或者我是
if ($(scheduleData).length > 0) {
for(var i = 0; i < scheduleData.length; i++) {
var item = scheduleData[i];
var html = "<tr>";
html += "<td>" + item.endDate + "</td>";
// ... etc
html += "</tr>"; // should close the <tr> here
}
}