请参阅此处的示例 - http://jsfiddle.net/jayblanchard/b2y1tagk/
使用以下代码我会认为我会将所有三个元素附加到结果中,但我不这样做。我明白了:
primary - bar
secondary - glorp
var elements = [{
type: 'secondary',
name: 'foo'
}, {
type: 'primary',
name: "bar"
}, {
type: 'secondary',
name: "glorp"
}];
var elementItem;
$(elements).each(function () {
if (this.type == 'primary') {
elementItem = this.type + ' - ' + this.name + '<br />';
} else {
elementItem += this.type + ' - ' + this.name + '<br />';
}
});
$('#results').append(elementItem);
所以我认为我应该将+=
运算符添加到if条件的第一部分,但是当我这样做时,我得到了这个:
undefinedsecondary - foo
primary - bar
secondary - glorp
生成它们时它们的顺序无关紧要,它们只有在完成时才必须存在。我确信我错过了一些明显的东西,有人可以告诉我那是什么吗?
答案 0 :(得分:3)
elementItem = this.type + ' - ' + this.name + '<br />';
需要:
elementItem = this.type + ' - ' + this.name + '<br />' + elementItem;
否则,如果primary不是第一项,则覆盖它。
使用var elementItem = "";
初始化它,因此它不会将elementItem类型转换为字符串“undefined”
答案 1 :(得分:2)
当您到达主要类型时,您正在使用elementItem
重置=
变量。尝试附加列表中的每个项目。按var elementItem=''
初始化elementItem。
var elements = [{
type: 'secondary',
name: 'foo'
}, {
type: 'primary',
name: "bar"
}, {
type: 'secondary',
name: "glorp"
}];
var elementItem = '';
$(elements).each(function () {
if (this.type == 'primary') {
elementItem += this.type + ' - ' + this.name + '<br />';
} else {
elementItem += this.type + ' - ' + this.name + '<br />';
}
});
$('#results').append(elementItem);