在下面的代码中,我使用div,在新javascript对象中为多个项目克隆它,用标题填充每个克隆并发布,然后清除第一个父项。解析后console.log(message.length)
返回4.所以我希望循环迭代4次,留下4个div的标题和帖子。但是,此代码返回1#div;" first note"和"测试消息...","第二次测试"的2个div。并且"更多......",4个"第三个测试"和"更多......"和8个div"第四个测试"和更多......"。我错过了什么?
这是存储在消息对象中的内容
message = [{"date": "Sat, 15 Oct 2016 14:47:00 GMT", "id": 5, "post": "test message for the body of the post", "title": "first note"},
{"date": "Sat, 15 Oct 2016 15:20:06 GMT", "id": 6, "post": "some more text for a new test post", "title": "second test"},
{"date": "Mon, 17 Oct 2016 13:24:05 GMT", "id": 7, "post": "some more text", "title": "third test"},
{"date": "Mon, 17 Oct 2016 13:28:09 GMT", "id": 8, "post": "even more text to add", "title": "fourth test"}]
这是来自userhome.js
else {
var noteObj = JSON.parse(message);
var note = null;
$.each(noteObj, function (index, value) {
note = $(".list-group").clone();
$(note).find("h4").text(value.title);
$(note).find("p").text(value.post);
$(".jumbotron").append(note);
});
$(".list-group:first").empty();
//print success message to console
console.log("successfully retrieved notes");
}
这是来自userhome.html
<div class="jumbotron">
<h1>welcome!</h1>
<div class="list-group">
<a href="#" class="list-group-item active">
<!--start dynamic section-->
<h4 class="list-group-item-heading"></h4>
<p class="list-group-item-text"></p>
<!--end dynamic section-->
</a>
</div>
</div>
答案 0 :(得分:3)
当您致电$(".list-group").clone()
时,您将在每次迭代时克隆整个列表。因此,您在第一次迭代时获得1个克隆,在第二次迭代时获得2个克隆,在第三次迭代时获得4个克隆等。然后,您可以更改所有克隆的标题和帖子,然后将所有克隆添加到jumbotron。因此,更具体的选择。例如,您可以使用$(".list-group").first().clone()
。
答案 1 :(得分:1)
每个循环都克隆整个列表。这就是你得到的原因,1,2,4,8 ...
您只想克隆列表的第一项。
在您的代码中更改此行:
note = $(".list-group").clone();
为:
note = $(".list-group").first().clone();
这将解决它。
每次调用$(note)
时,您都不需要使用note
,因为note
本身已经是$ jQuery元素。你可以拥有这个:
note.find("h4").text(value.title);
note.find("p").text(value.post);
最佳做法是在引用jQuery元素时使用$符号,因此最终的代码将是这样的:
else {
var noteObj = JSON.parse(message);
var $note = null;
$.each(noteObj, function (index, value) {
$note = $(".list-group").clone();
$note.find("h4").text(value.title);
$note.find("p").text(value.post);
$(".jumbotron").append(note);
});
$(".list-group:first").empty();
//print success message to console
console.log("successfully retrieved notes");
}