我正在过滤一组对象,并且对于数组中的每次迭代,我都使用一个模板并将其替换为我们当前所在对象的唯一信息(属性)。然后将模板附加到 DOM。
请查看第一个代码块并注意代码行在迭代器函数$('body').append(temp);
内部$.each
我特别有兴趣了解 -
是因为我在迭代器函数
$('body').append(temp);
内部留下了 DOM 将被附加到每次迭代中吗?$.each
如果数组中有一个包含 50 个项目的列表怎么办?在那种情况下,对于每次迭代,我们是否都在 DOM 中添加了一些东西?
代码
(function() {
var content = [
{
title: "Speak of the devil and he shall appear",
thumbnail: 'images/bane.jpg',
},
{
title: 'Me the joker',
thumbnail: 'images/Joker.jpg',
},
];
var template = $.trim( $('#blogTemplate').html() );
$.each( content, function( index, obj ) { $(content).each(function() {})
var temp =
template.replace( /{{title}}/ig, obj.title )
.replace( /{{thumbnail}}/ig, obj.thumbnail );
console.log(temp);
$('body').append(temp);
});
})();
为了解决这个问题,我认为最好先建立一个字符串,然后将该字符串只扔到 DOM 中一次。所以我创建了一个名为 frag 的新变量并将其设置为一个空字符串。然后我们将通过对象数组进行过滤,并且对于数组中的每个对象,而不是附加到我们将要说的 DOMfrag+=
后面是堆叠的.replace
方法。
var template = $.trim( $('#blogTemplate').html() );
var frag = '';
$.each( content, function( index, obj ) {
frag +=
template.replace( /{{title}}/ig, obj.title )
.replace( /{{thumbnail}}/ig, obj.thumbnail );
console.log(frag);
});
$('body').append(frag);
})();
当我们完成后,我们可以说$('body').append(frag);
在$.each
迭代器函数之外。
这让我想到了最后一个问题:
3a。我已经$('body').append(temp);
退出了该$.each
函数,这样做是否阻止了在 $.each 函数的每次迭代中更新 DOM?