这段代码使用来读取table中的值,主要getAllSelectTableData()去读页面table内容是很慢求高手优化一下
Class("TableCtrl",
{
    init: function(id) {
     this.id = id;
     this.initbindevent(id);
    },
    initbindevent : function(id){
      var obj = $('#' + id).find("input[type!=checkbox],select,textarea");
     
        $.each(obj, function(i, o) {
            $(o).change(function() {
                var $tr = $(o).parent().parent().eq(0);
                if(!$tr.hasClass("template"))
                 $(o).parent().parent().eq(0).addClass("rowtoupdate");
            });
        });
    },
    setTableNameToElement: function(id){
     var obj = $('#' + id).find("input[type!=checkbox],select,textarea");
        $.each(obj, function(i, o) {
           if(o.name){
             o.name = id+"_"+o.name;
           }
        });
    },
    addrow: function(id) {
        var $tr = $('#' + id).find("tr.template")
                   .clone(true)
                   .removeClass("template")
                   .addClass("rowtoadd")
                   .appendTo($('#' + id))
                   .toggle();
       $tr.find("input[type!=checkbox],select,textarea").each( function(){
         this.id=this.name+$('#' + id)[0].rows.length;
    var cssclass= $(this).attr("class");
    if(cssclass.indexOf("ignore")>=0){
    var ss =  cssclass.replace("ignore,","");
    $(this).removeClass(cssclass).addClass(ss);
    }
          });
    },
    removerow: function(id) {
        var obj = $('#' + id);
        $.each(obj.find("tr.rowtoadd td>input:checked"), function(i, o) {
            $(o).parent().parent().eq(0).remove();
        });
        $.each(obj.find("td>input:checked"), function(i, o) {
            $(o).parent().parent().eq(0).addClass("rowtodelete").hide();
        });
    },
    checkall: function(id) {
        var obj = $('#' + id);
        var checked = obj.find("th>input[type='checkbox']:first").get(0).checked;
        $.each(obj.find("th>input[type='checkbox']:visible"), function(i, o) {
            o.checked = checked;
        });
    },
    getTableData: function(id){
      var strBuffer = new StringBuffer();
      this.getallnew(strBuffer,id);
      this.getalldelete(strBuffer,id);
      this.getallupdate(strBuffer,id);
      data = strBuffer.toString(); 
         return data.substr(0, data.length - 1);
    },
    getElementByNameInTable:function(id,elementName){
     var $objs = $('#' + id).find("tr[class!='rowtodelete'][class!='template'] input[name='"+elementName+"']");
     return $objs.toArray();
    
    },
    getAllSelectTableData:function(id){
     var self = this;
     var obj = $('#' + id);
     var strBuffer = new StringBuffer();
        $.each(obj.find("tr[class!='rowtodelete'] th>input:checked"), function(i, o) {
            var tro = $(o).parent().parent()[0];
             for (var j=0; j < tro.cells.length; j++){
             for(var z =0 ; z < tro.cells[j].children.length; z++ ){
              el = tro.cells[j].children[z];
              self.filterElement(el,strBuffer,'checked',id);
             }
            }
        });
        var data = strBuffer.toString(); 
        return data.substr(0, data.length - 1);
        
    },
    backdataSet:function(tablename,data){
     var obj = $("[name='"+tablename+"']");
     var el ='';
     $.each(obj.find("tr.rowtoadd"), function(i, o) {
     for (var j=0; j < o.cells.length; j++){
             for(var z =0 ; z < o.cells[j].children.length; z++ ){
              el = o.cells[j].children[z];
              var elname = el.name;
              if((data[tablename])[i][elname]){
               $(el).val((data[tablename])[i][elname]);
              }
             }
            }
            $(o).removeClass("rowtoadd");
     });
    },
    getallnew: function(strBuffer,id) {
     var self = this;
        var obj = $('#' + id);
        var el = '';
        $.each(obj.find("tr.rowtoadd"), function(i, o) {
             for (var j=0; j < o.cells.length; j++){
             for(var z =0 ; z < o.cells[j].children.length; z++ ){
              el = o.cells[j].children[z];
              self.filterElement(el,strBuffer,'insert',id);
             }
            }
        });
    },
    getalldelete: function(strBuffer,id) {
     var self = this;
        var obj = $('#' + id);
        var el = '';
        $.each(obj.find("tr.rowtodelete"), function(i, o) {
            for (var j=0; j < o.cells.length; j++){
            for(var z =0 ; z < o.cells[j].children.length; z++ ){
             el = o.cells[j].children[z];
             self.filterElement(el,strBuffer,'delete',id);
            }
            }
        });
    },
    getallupdate: function(strBuffer,id) {
     var self = this;
        var obj = $('#' + id);
        $.each(obj.find("tr.rowtoupdate:visible"), function(i, o) {
             for (var j=0; j < o.cells.length; j++){
             for(var z =0 ; z < o.cells[j].children.length; z++ ){
              el = o.cells[j].children[z];
              self.filterElement(el,strBuffer,'update',id);
             }
            }
        });
    },
    filterElement:function(element,strBuffer,status,id){
el = element;
        disabled = element.disabled;
        name = element.name;
        val = element.value;        if (!disabled && name){
            switch (el.type)
               {
                case 'select-one':
                case 'select-multiple':
                    for (var j = 0; j < el.options.length; j++) {
                        if (el.options[j].selected) {
                            if (navigator.userAgent.indexOf("MSIE")>0) {
                                strBuffer.append(status);
                                strBuffer.append('_');
                                strBuffer.append(id);
                                strBuffer.append('_');
                             strBuffer.append(encodeURIComponent(name));
                             strBuffer.append('=');
                             strBuffer.append(encodeURIComponent(el.options[j].attributes['value'].specified ? el.options[j].value : el.options[j].text));
                             strBuffer.append('&');
                            }
                            else {
                             strBuffer.append(status);
                                strBuffer.append('_');
                                strBuffer.append(id);
                                strBuffer.append('_');
                             strBuffer.append(encodeURIComponent(name));
                             strBuffer.append('=');
                             strBuffer.append(encodeURIComponent(el.options[j].hasAttribute('value') ? el.options[j].value : el.options[j].text));
                             strBuffer.append('&');
                            }
                        }
                    }
                    break;
                case 'radio':
                case 'checkbox':
                    if (el.checked) {
                        strBuffer.append(status);
                        strBuffer.append('_');
                        strBuffer.append(id);
                        strBuffer.append('_');
                     strBuffer.append(encodeURIComponent(name));
                     strBuffer.append('=');
                     strBuffer.append(encodeURIComponent(val));
                     strBuffer.append('&');
                    }else{
                     strBuffer.append(status);
                        strBuffer.append('_');
                        strBuffer.append(id);
                        strBuffer.append('_');
                     strBuffer.append(encodeURIComponent(name));
                     strBuffer.append('=');
                     strBuffer.append(encodeURIComponent('off'));
                     strBuffer.append('&');
                    }
                    break;
                case 'file':                case undefined:                case 'reset':                case 'button':                    break;
                case 'submit':
                
                default:
                    if (el.prikey){
                      strBuffer.append(status);
                    strBuffer.append('_');
                    strBuffer.append(id);
                    strBuffer.append('_');
                 strBuffer.append(encodeURIComponent(name));
                 strBuffer.append('=');
                 strBuffer.append(encodeURIComponent(element.realvalue));
                 strBuffer.append('&');
                    }else{
                  strBuffer.append(status);
                    strBuffer.append('_');
                    strBuffer.append(id);
                    strBuffer.append('_');
                 strBuffer.append(encodeURIComponent(name));
                 strBuffer.append('=');
                 strBuffer.append(encodeURIComponent(val));
                 strBuffer.append('&');
                 }
                   
                    break;
            }
        }
}
});

解决方案 »

  1.   

    小弟是在jquery方面是菜鸟求高手
      

  2.   

    说明一下table中超过300条数据就很慢呀~如果不用jquery有什么好的解决办法都可以
      

  3.   

    这段代码就是读取table中的数据 table的格式A     B   C    D   E    F1     2    3   4   5    61     2    3   4   5    6
    当行数超过300条读取很慢
      

  4.   

    就这一句话对别人理解代码有帮助吗?你要说下按照代码逻辑你是怎么读的啊。读一个普通的table不就十来行代码的事吗,你这几百行代码在干啥?
      

  5.   

    function saveDxxx() {

    $("#nsrlxDm").removeClass("required");
    var params = {
    formName : "submitform"
    };

    if (Ctais.ValidatorCtrl.validate(params)== false) {
    return;
    }

    $("#commitButton").attr("disabled","true");
    var param = Ctais.TableCtrl.getAllSelectTableData("fsdxTable");
    var options = {
    url : "/Dxpt001Dxlr/saveDxxx.pfv",
    dataparam : param,
    formName : 'submitform',
    sucess_callback : function(data) {

    if (data.message != null && data.message != "") {
    Ctais.msg.show({
    style : "warning",
    message : data.message
    });
    }
    }
    };
    Ctais.AjaxCtrl.ajax(options);
    }
    加粗调用的顶部的代码getAllSelectTableData方法 读取table表如图 
      

  6.   

    在我提交保存是要把table中的数据提取出来传到后台遍历一条一条的保存上
      

  7.   

    var param = [b]Ctais.TableCtrl.getAllSelectTableData("fsdxTable");
    [/b]
      

  8.   

    为啥要一条条保存?
    直接把table读到一个数组里然后再一把提交不行么?