2

我正在尝试重新填充下拉菜单。我正在进行 ajax 调用以检索 myList。当我有了新列表时,我从选择元素中删除所有选项并插入新值(大约 100 个选项)。这适用于更高版本的 IE 和 Firefox;刷新几乎是即时的。但是,在 IE6 上,这些操作确实会降低浏览器的速度。随着选项被从中删除,下拉框几乎变成了动画,并且持续了几秒钟。除了将旧列表与新列表进行比较并且仅删除/添加已更改的项目之外,还有什么方法可以加快速度?

$("#myselect").children.remove();

$.each(myList, function(i, val) {
   $("<option>").attr("value", val.myID)
                .text(val.myText)
                .appendTo("#myselect");
});
4

2 回答 2

2

如果您创建一个新元素并将其切换出来怎么办?

var newSelect = $("<select></select>");
$.each(myList, function(i, val) {
    $("<option>").attr("value", val.myID)
                 .text(val.myText)
                 .appendTo(newSelect);
});
$("#myselect").replaceWith(newSelect);
于 2009-11-30T17:25:45.593 回答
2

尽管您的代码要好得多,但如果它太慢,请使用直接路由(我过去做过,在使用 jQuery 之前,它在所有浏览器中都是即时的,包括 IE6)。只需通过删除 html 从选择中删除所有子项:

$("#myselect").html('');

并修改循环,以便为每个选项创建 html,并使用

$('#myselect').html(optionsHTML); 

根据性能,您可以在此解决方案和 karim79 的解决方案之间尝试中间立场(即使用 html() 删除选项,并使用数组附加它们而不是创建纯 HTML)。

于 2009-11-30T17:42:56.947 回答