我需要弄清楚列表中的哪个元素位于页面顶部。我的解决方案是使用 jQuery each 循环遍历元素并查看位置。
这个功能很好,但是当有很多元素时性能会降低。有关简化示例,请参见此小提琴
这是我注意到的奇怪的事情
- 这是第一次调用 position.top() 需要时间
- 我在 chrome(几乎 3 秒)和 firefox(不到 1 秒)中看到了截然不同的行为
我正在尝试做的事情有更好的解决方案吗?
这是代码
<p>Log:
<div id="log">
</div>
</p>
Items:
<ul id="items">
</ul>
for (var i = 0; i < 10000; i++) {
$("#items").append("<li id='item_" + i + "'>" + i + "</li>");
}
var top = new Date().getTime();
$("li[id^='item_']").each(function() {
var start = new Date().getTime();
var top = $(this).position().top;
var end = new Date().getTime();
var time = end - start;
if (time > 1) {
$("#log").append($(this).attr('id') + ": " + time + "<br/>");
}
});
var bottom = new Date().getTime();
var overalltime = bottom - top;
$("#log").append("Overall Time: " + overalltime + "<br/>");