所以我试图使用jquery来填充这样的select标签,我选择的范围实际上是从数据库中提取的,但这简化了你的事情:
var select_tag = $("select");
for(var i = 0; i < 10000; i++)
{
$("<option value='" + i + "'>" + i + "</option>").appendTo(select_tag);
}
当我这样做时,代码需要花费很长时间才能运行并填充select标签。这么多,以至于用户可能会开始认为他们的浏览器关闭并开始随处点击。无论如何我可以加快/优化它的过程,以便它不需要这么长时间吗?
请注意,select标签本身会根据点击事件添加到页面中,并且不会立即加载网页。在此示例中,用户在一个页面上,然后用户单击“下一步”按钮,这将触发各种功能,其中一个功能将select元素添加并填充到DOM。我只需要一种方法来加速或优化流程。
答案 0 :(得分:3)
这是一个解决方案。
var options = "";
for(var i = 0; i < 10000; i++)
{
options += "<option value='" + i + "'>" + i + "</option>";
}
$("select").append(options);
答案 1 :(得分:0)
不幸的是,我不认为你可以进行很多“宏观”优化 不过,您可以进行一些较小的优化。
document.createElement('option')
创建元素
请参阅Advantages of createElement over innerHTML? DocumentFragment
一次批量插入所有选项
请参阅http://jsperf.com/document-fragment-vs-innerhtml-vs-looped-appendchild 以下是一些示例代码:
var select_tag = $("select");
var docFrag = document.createDocumentFragment();
for(var i = 0; i < 10000; i++)
{
docFrag.appendChild(createOption(i, i));
}
select_tag.append(docFrag);
function createOption(text, value) {
// Avoid parsing HTML using jQuery; use native methods instead:
var option = document.createElement('option');
option.textContent = text;
option.setAttribute('value', value);
return option;
}
答案 2 :(得分:0)
您可以从文档中删除元素并添加所有元素,然后将其重新插入文档中。
var select_tag = $("select").detach();
for(var i = 0; i < 10000; i++)
{
$("<option value='" + i + "'>" + i + "</option>").appendTo(select_tag);
}
$('#orignal-location').append(select_tag);
答案 3 :(得分:0)