2015-04-03 75 views
-1

我想使用.append使用for循环显示多个数据。 我需要通过.html函数第二次点击某些其他数据来替换所有数据。.append里面的.html不工作在jquery

这是我的代码更多的解释。

$(".content").html(function(){ 
    for(var l=1; l<4 ; l++) 
    $(".content").append("Event-"+l+"<br>"+player.activity[l].desc+"<br>"); 
} 

假设我有活性的json象下面这样:

player : [{ 
"name": "Johny", 
"activity" : [ 
    {"id:1","desc" : "abc"}, 
    {"id:2","desc" : "abc"}, 
    {"id:3","desc" : "abc"} 
] 
},{ 
"name": "Mony", 
"activity" : [ 
    {"id:1","desc" : "abc"}, 
    {"id:2","desc" : "abc"}, 
    {"id:3","desc" : "abc"} 
] 
}] 

所以基本上我想取代我佐尼的活动MONY的。

我也尝试交换内部.append里面的.html这样的方法工作正常,但.app内部.html不工作。它将Mony的数据附加到johny的数据。

有什么建议吗?

+0

为什么不在''''''''.html's函数外面留下'for'? – phts 2015-04-03 07:08:24

回答

2

功能 is not allowed.html方法。只有字符串。

您的for应该按照您的要求进行。不要.html的函数内部放置:

for(var l=1; l<4 ; l++) 
    $(".content").append("Event-"+l+"<br>"+player.activity[l].desc+"<br>"); 
} 

如果您要更换的内容,那么只需for之前调用.html与空字符串:

$(".content").html(""); 
for(var l=1; l<4 ; l++) 
    $(".content").append("Event-"+l+"<br>"+player.activity[l].desc+"<br>"); 
} 

UPDATE

建立一个字符串并只更改一次DOM更好。这将减少DOM访问。

var html = ""; 
for(var l=1; l<4 ; l++) 
    html += "Event-"+l+"<br>"+player.activity[l].desc+"<br>"; 
} 
$(".content").html(html); 

更新#2

功能允许的,但return应使用:

$(".content").html(function(){ 
    var html = ""; 
    for(var l=1; l<4 ; l++) 
    html += "Event-"+l+"<br>"+player.activity[l].desc+"<br>"; 
    } 
    return html; 
}); 
+0

对不起,允许。我更新了。应该使用'return' – phts 2015-04-03 07:19:12

+0

@phts thnx作为答案。我使用了空的.html方法。 – 2015-04-03 07:24:17

1

此代码是非常马车。

1).html()应该有参数作为字符串不是函数。

2)播放器是数组player.activity [l]将不起作用。

如果你想看到所有的说明:以下是该解决方案

for(var i=0; i<player.length ; i++){ 
    for(var j=0; j<player[i].length ; j++){ 

     $(".content").append("Event-"+j+"<br>"+player[i].activity[j].desc+"<br>"); 
    } 
    } 
+0

Thnx您的建议。但是我想用其他的替代一个信息块,我之前在.html(“”)之前用循环 – 2015-04-03 07:27:21

1

documentation说:

在jQuery 1.4中,.html()方法允许HTML内容通过传递设置在函数中

所以,是的,你可以使用.html()里面的函数。函数必须返回一个字符串,它将是元素的内容。

$(".content").html(function(){ 
    var content = ""; 
    for (var l = 1; l < 4 ; l++) { 
     content += "Event-" + l + "<br>" + player.activity[l].desc + "<br>"; 
    } 
    return content; 
}); 
+0

来实现,但是这并没有传递函数。实际上仅传递一个字符串。在函数()中,你正在返回一个字符串。实际上用一个字符串调用.html()方法。 – Tuhin 2015-04-03 07:23:05

+0

不,我们不是调用函数,只是传递它。请注意'.html()'内部没有函数调用操作符调用 – meskobalazs 2015-04-03 07:23:48

+0

但是您不能否认.html()具有参数字符串。我们可以用很多方式编写代码。但最后它必须是字符串 – Tuhin 2015-04-03 07:26:02