首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换IE8中大下拉列表的最快方法

替换IE8中大下拉列表的最快方法
EN

Stack Overflow用户
提问于 2015-07-15 13:37:07
回答 2查看 142关注 0票数 1

我必须管理大的下拉列表(数千项),并且我在使用IE8时遇到了jQuery .html方法的性能问题。实际上,清空内容需要3-4秒。

你有什么解决办法吗?

代码:

代码语言:javascript
复制
var selectHtml = "";
$(data.items).each(function () {

    var option = "<option value='";
    option += this.Value + "'";

    if (this.Selected) {
        option += " selected";
    }

    option += ">" + this.Text + "</option>";
    selectHtml += option;
});
$(target).html(selectHtml);

.html of jQuery call .empty,在IE分析器中,我可以看到,占用大部分时间的是.empty。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-15 14:57:52

我在这里找到了解决方案:https://stackoverflow.com/a/23552898/1431524

最后我得到了这样的代码:

代码语言:javascript
复制
function clearOptions(select) {
    var selectParentNode = select.parentNode;
    if (selectParentNode) {
        var newSelect = select.cloneNode(false); // Make a shallow copy
        selectParentNode.replaceChild(newSelect, select);
        return newSelect;
    }
    return undefined;
}

function appendSelectHtml(data, target) {
    var selectHtml = [];
    $(data.items).each(function () {
        var selected = this.Selected ? ' selected' : '';
        var option = "<option value='" + this.Value + "'" + selected + ">" + this.Text + "</option>";
        selectHtml.push(option);
    });
    target = $(clearOptions(target[0])); //The item that was contained in the selector isn't in the DOM anymore
    target.append(selectHtml.join(""));       
}
票数 0
EN

Stack Overflow用户

发布于 2015-07-15 13:48:39

假设你的意思是

代码语言:javascript
复制
<ul id='mylist'>
  <li>Item 1</li>
  .... 
  <li>Item n</li>
</ul>

或等效的select/option语句,您需要:

代码语言:javascript
复制
$('#mylist').empty()

或者,如果您实际上只更改下拉列表中的几个项,也许您应该在data.value和选择列表中的元素之间维护一个映射,因此您只需要添加尚未放在列表中的项,并且对要删除的项有一个简单的引用。

我怀疑你对时间分配的看法是错误的,而且大部分时间都是在构建列表。尝试将所有新选项项推送到数组上,然后在最后执行数组的单个联接。

代码语言:javascript
复制
var list = [];

$(data.items).each(function () {
    var selected = this.Selected ? ' selected' : '';
    var option = "<option value='" + this.Value + "'" + selected + ">" 
                 + this.Text + "</option>";
    list.push( option);
});

$(target).html(list.join( "\n"));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31431988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档