【问题标题】:Appending rows to existing gridview without loop in Javascript在Javascript中将行附加到现有的gridview而不循环
【发布时间】:2019-12-12 16:37:30
【问题描述】:

我在 Javascript 中有一个函数,可以将新行附加到现有的 GridView。

function OnSuccess(response) {
    var xmlDoc = $.parseXML(response.d);
    var xml = $(xmlDoc);
    var customers = xml.find("ResultTable");
    $("[id$=grd] .loader").remove();
    customers.each(function () {
        var customer = $(this);
        var row = $("[id$=grd] tr").eq(1).clone(true);
        $(".groupname", row).html(customer.find("GroupName").text());
        $(".fullfundname", row).html(customer.find("FullFundName").text());
        $(".datafieldname", row).html(customer.find("DataFieldName").text());
        $(".comparisonresult", row).html(customer.find("ComparisonResult").text());

        $("[id$=grd]").append(row);
    });

}

这按预期工作,但速度很慢。每次调用此函数时,将向现有网格追加 1000 条记录。

任何提高性能的指针,比如我们可以一次性分配整个 xml。注意,我的列名是固定的

【问题讨论】:

    标签: javascript asp.net performance gridview


    【解决方案1】:

    我尝试为您提供解决方案,但我没有测试数据。希望这项工作。

    jQuery.fn.outerHTML = function (s) {
        return s ?
            this.before(s).remove() :
            jQuery("<p>").append(this.eq(0).clone()).html();
    };
    
    function OnSuccess(response) {
        var xmlDoc = $.parseXML(response.d);
        var xml = $(xmlDoc);
        var customers = xml.find("ResultTable");
        $("[id$=grd] .loader").remove();
        var template = $("[id$=grd] tr").eq(1).clone(true);
        template.find(".groupname").text("@@GROUPNAME");
        template.find(".fullfundname").text("@@FULLFUNDNAME");
        template.find(".datafieldname").text("@@DATAFIELDNAME");
        template.find(".comparisonresult").text("@@COMPARISONRESULT");
        template = template.outerHTML();
        let newRows = "";
        customers.each(function () {
            var customer = $(this);
            let row = template;
            row = row.replace("@@GROUPNAME", customer.find("GroupName").text());
               .replace("@@FULLFUNDNAME", customer.find("FullFundName").text());
               .replace("@@DATAFIELDNAME", customer.find("DataFieldName").text());
               .replace("@@COMPARISONRESULT", customer.find("ComparisonResult").text());
            newRows += row;
        });
        $("[id$=grd]").html($("[id$=grd]").html() + newRows);
    }
    

    【讨论】:

    • 不是替换内容,1000条记录全是"@@GROUPNAME", "@@FULLFUNDNAME"", "@@DATAFIELDNAME" &amp; "@@COMPARISONRESULT"
    • 谢谢,它成功了。如果你能解释你做了什么,那就太好了。
    • 我忘记将值设置回行变量。 :( str.replace 不是自动更改变量值,所以我们需要手动设置。
    • 我理解那部分。您能否解释一下整个方法。主要是这部分jQuery.fn.outerHTML = function (s) { return s ? this.before(s).remove() : jQuery("&lt;p&gt;").append(this.eq(0).clone()).html(); };
    • outerHTML 用于从 获取整个代码,如果我们使用 html(),它只会在 This 中为我们提供 html。我们需要将 html 附加到表格的完整代码。为什么我使用模板 html 而不是对象。如果我们与使用 jquery 的查找对象进行比较,替换并不重。因此,我们使用 jquery find 来准备模板,并使用 replace 进行处理以输入数据。对于大数据来说,将对象放到表中也是一项繁重的任务。所以我们将数据一次性放入进程的最后。
    猜你喜欢
    • 2016-12-09
    • 1970-01-01
    • 2017-10-23
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2021-08-15
    • 1970-01-01
    相关资源
    最近更新 更多