如何将大量项目添加到 HTML 选择对象
How to add a large number of items to an HTML selectObject
>我需要在一个页面上填充八个 selectObject 下拉对象,每个对象有数千 (8192( 个项目。我目前正在用Javascript做这件事,这是我所知道的唯一方法:
var iCount;
var option1;
var selectObject1 = document.getElementById('ifbchan');
for(iCount = 0; iCount < 8192; iCount++)
{
option1=document.createElement("option");
option1.text = "Out " + iCount;
option1.value=iCount;
try
{
selectObject1.add(option1, selectObject1.options[null]);
}
catch (e)
{
selectObject1.add(option1, null);
}
}
selectObject1.selectedIndex = 0;
此方法工作正常,但速度非常慢!这些 8K 循环中的每一个都需要大约 10 秒才能完成。乘以 8 个不同的循环,问题很明显。有没有其他方法可以将大量项目添加到下拉列表中,速度会更快?用于显示大量项目列表的下拉控件是否有更快的替代方法?感谢您的任何想法。
~提姆
我会尝试以下方法:
var elements = ""
var i;
for(i= 0; i < 8192; i++){
elements += "<option value='"+ i + "'>Out " + i + "</option>";
}
document.getElementById("ifbchan").innerHTML = elements;
这样,每个循环只在 DOM 上执行一个操作,而不是 8000+。
哦,这是我之前准备的:http://jsfiddle.net/3Ub4x/
在答案之前有几件事。
首先,我不认为最好的方法是服务器端实现。如果你可以在客户端上做一些事情,你应该这样做,而不是触摸你的服务器(如果它与安全无关(。
第二件事 - 为什么选择列表中需要 8000 个元素?作为应用的用户,谁愿意滚动浏览 8000 个元素只是为了选择他的元素?如前所述 - 自动完成听起来更合适。
现在是一个答案:
您的原始方法在这里:完成 10000 个元素大约需要 1724 毫秒(您可以通过运行脚本和检查器来查看这一点(。
var start = new Date();
var n = 10000;
var iCount;
var option1;
var selectObject1 = document.getElementById('ifbchan');
for(iCount = 0; iCount < n; iCount++)
{
option1=document.createElement("option");
option1.text = "Out " + iCount;
option1.value=iCount;
try
{
selectObject1.add(option1, selectObject1.options[null]);
}
catch (e)
{
selectObject1.add(option1, null);
}
}
selectObject1.selectedIndex = 0;
var time = new Date() - start;
console.log(time);
我不喜欢很多这样的代码(它太多行(,所以我会用jquery重写它。
var start = new Date();
var n = 10000;
for (var i = 0; i<n; i++){
$("#ifbchan").append("<option value="+i+">"+i+"</option>")
}
var time = new Date() - start;
console.log(time);
下一个小提琴在这里。线路少得多,时间有所改善。现在是 1312 毫秒。但它在每个循环中附加新元素。
下一个小提琴摆脱了这个。
var start = new Date();
var n = 10000;
var html = '';
for (var i = 0; i<n; i++){
html += "<option value="+i+">"+i+"</option>";
}
$("#ifbchan").append(html);
var time = new Date() - start;
console.log(time);
哇,现在只有 140 毫秒。
for (var i = 0; i<n; i++){
select.append('<option value='+i+'>'+i+'</option>');
}
请注意,这在IE中不起作用。请参阅此链接 -
使用 innerHTML 更新 SELECT – IE 和 FF 之间的差异
- 从动态创建的html选择中选择所选选项
- 向html选择元素添加选项
- HTML选择,在DOM中选择了正确的选项,但在firefox中显示了错误的项目
- 构建HTML选择字段并使用JavaScript数组选择选项
- 当html选择/选项发生更改时,需要更新输入字段
- 使用javascript和html选择第二个选项后发出警报
- javascript函数将当前时间显示为html选择标记的预选值
- laravel5.0中HTML选择标记的动态选择
- jQuery将输入集中在下一个tr->td时,td包含一个输入字段,但从不关注html选择
- 基于's是在HTML选择框中选择的
- 如何使用Angular 2设置HTML选择值
- 在html选择中显示AJAX成功JSON值
- 使用 jQuery 增加 HTML 选择框的大小属性
- 当我认为它不应该重新渲染视图时,如何防止 Meteor 在 html 选择 dom 单击事件上重新渲染视图
- HTML 选择元素的只读等效项
- 如何使 html 选择选项在 Meteor 中工作
- 当“不相关”的 html 选择元素没有选择任何选项时,如何退出 jQuery 事件
- HTML选择:将默认值设置为给定值,而不是从选项列表中选择
- html选择-范围为0-10
- 是否可以在HTML选择下拉菜单的每个选项上附加一个qtip2工具提示