我正在<li>
向<ul>
.
以前,我在做类似的事情:
var playlistItemListUl = $('#PlaylistItemList ul');
for(var i = 0; i < 1000; i++ ){
var listItem = $('<li/>', {
'data-itemid': item.get('id'),
contextmenu: function (event) {
console.log('contextmenu', event);
},
click: function(event){
console.log('click', event);
}
});
listItem.appendTo(playlistItemListUl);
}
在本例中,listItem 的 click 和 contextmenu 事件成功写入 console.log。但是,它非常缓慢,我想减少批量添加引起的延迟。所以,我重写了代码,只修改了一个 DOM:
var playlistItemListUl = $('#PlaylistItemList ul');
var listItemsOuterHtml = [];
for(var i = 0; i < 1000; i++ ){
var listItem = $('<li/>', {
'data-itemid': item.get('id'),
contextmenu: function (event) {
console.log('contextmenu', event);
},
click: function(event){
console.log('click', event);
}
});
listItemsOuterHtml.push(listItem.prop('outerHTML'));
}
playlistItemListUl.append(listItemsOuterHtml.join(''));
这减少了所需的 DOM 操作的数量,但我所有精心绑定的 jQuery 事件都被丢弃了。
这两种风格之间是否有一个有效的中间地带,可以让我使用 jQuery 创建节点,而不是手工制作 HTML,但避免不必要的 DOM 插入?