【发布时间】:2013-07-13 17:51:35
【问题描述】:
我有循环并动态地将链接附加到#content。我写了两种方式。
(1)
$.each(array, function(key, value) {
$('#content').append('<a href="#">text</a>');
$('#content a:last').click(function(e) {
$.ajax({ url: ...
...
});
});
});
(2)
$.each(array, function(key, value) {
$('#content').append('<a href="#">text</a>');
});
$('#content a').click(function(e) {
$.ajax({ url: ...
...
});
});
问: 使用(1)方式代替(2)会更糟吗?你怎么知道?如何设置计时器来测试每个方法执行多少秒(绑定“点击”事件)?
【问题讨论】:
-
你为什么不亲自看看并在 jsPerf.com 上运行一些测试?
-
理论上,第一种方法可以避免将它们全部循环两次,但是仍然可以减少到一行而不是两行,避免额外调用 queryselectorall。
-
我认为
click将事件附加到#content下的所有锚标签;你可以使用on来使用委托 -
您不妨运行
$('#content').click( ... )并检查函数中的a标记以更快。 -
委托事件怎么样,这样您就不必在每个动态添加的链接上重新绑定它们?
$('#content').on('click', 'a', function(e) { ... })
标签: javascript jquery html performance append