有没有一种快速的方法来替换IE中的大型tbody?

时间:2011-08-24 14:08:38

标签: javascript jquery

我需要使用下面的jQuery用新的Html替换tbody。当Html高于1Mb时,.empty()函数会挂起。

$("#searchForm").submit(function (event) {
    event.preventDefault();
    //$("#myTable tbody").empty();
    $.post($(this).attr('action'), $(this).serialize(), function (data) {

        //$("#myTable tbody").html(data);
        replaceTableBody("thebody", data);

    });
});  

我不担心这是否是一个棘手的解决方案,我只是想让它发挥作用...... 我尝试了这个,但无法让它工作:replacehtml-for-when-innerhtml-dogs-you-down

它只需要在IE中工作。

编辑

    var replaceTableBody = function(tbodyId, html){
        var temp  = document.createElement('div');
        temp.innerHTML = '<table><tbody id="thebody">'+html;
        var tb = document.getElementById(tbodyId);
        tb.parentNode.replaceChild(temp.firstChild.firstChild, tb);
        temp = null;
    };

4 个答案:

答案 0 :(得分:2)

我之前做过这个。如果你想要更快,那么你不能使用jquery

我写了一篇很长的博客文章,关于这个以及它是如何完成的,它很长,所以我不会把它粘贴在这里,只是链接它:

http://notetodogself.blogspot.com/2009/08/javascript-insert-table-rows-table-body.html

你必须不使用jquery 的原因是,一旦你将文本传递给.html(),jquery会做某些事情,比如搜索脚本,执行它们,修复某些东西等等。这通常是一个好东西,但IE上 1mb的文字并不是一件好事。

答案 1 :(得分:0)

如果你第一次删除tbody的所有行,如$('#myTable tbody')。remove()而不是调用$('#myTable tbody')。empty().... if删除行后,最后一步是必要的......

答案 2 :(得分:0)

尝试使用.each()并单独删除每一行。

$(“tbody tr”)。each(function(){$(this).remove();}); 我认为jquery是对的,但它是基本的想法。

答案 3 :(得分:0)

根据jQuery API文档:

When .html() is used to set an element's content, any content that was in that element is completely replaced by the new content.

在更新empty()之前,您是否需要致电tbody