本帖最后由 cj205 于 2013-10-01 06:50:52 编辑

解决方案 »

  1.   

    每列给个和列数字有关的样式  比如 col1 col2
    每行给个和行数字有关的样式 比如  row1 row2这样的话 你可以方便定位所有的
      

  2.   

    <table  id="tb1" width="100%" cellpadding="0" cellspacing="0" border="1">
       <tr><td>aaa</td><td>bbb</td><td>ccc</td><td>ddd</td></tr>
    </table>
    <script>
    var tb=document.getElementById('tb1');
    function add(rowCount){
     var rs=tb.rows,ii=0,cs=tb.rows[0].cells.length;
     for(var i=0;i<rowCount;i++){
        var r=tb.insertRow(-1);
      for(var j=0;j<cs;j++){
      r.insertCell(-1).appendChild( cEl('input',{type:'checkbox', i:ii,value:ii,id: 'ch'+ ii++  }  )  );
      }
     }
    }
    function cEl(tag,attrs){
    var el=document.createElement(tag);
    for(var k in attrs) el[k]=attrs[k]
      return el
    }
    add(10);//生成测试数据 
    /////////////////////////////////////////
    function getP(el,td){
    while( el&& el.tagName!= td.toUpperCase()) el= el.parentNode;
    return el;
    }var actCh,
    chs=tb.getElementsByTagName('input');
    tb.onclick=function(evt){
    evt=window.event||evt;
    var el=evt.srcElement||evt.target;
    var ch=getP(el,'td').getElementsByTagName('input')[0]; if(actCh &&  evt.shiftKey ) selChs(ch)
     
      actCh&&(actCh.parentNode.bgColor='#ffffff');
      ch.parentNode.bgColor='#fafaff';
    actCh=ch;}
    function selChs(ch){
      var cs=[actCh,ch].sort(function(a,b){ return a.i-b.i})
    for(var i=cs[0].i;i<=cs[1].i;i++) chs[i].checked= !chs[i].checked;
    }
    </script>
      

  3.   

    还一个问题,如果我创建的checkbox的id值不确定,能不能用获取点击行列的方式,不使用定义id的方式来实现
      

  4.   


    function SelectRow(selectObj) {
        var row = $(selectObj).parent().parent(); // 找到TR
        var find = false;
        $(row).find(":checkbox").each(function() {
            if (find) {
                $(this).prop("checked", true);
            } else {
                // 通过值比较找到当前的选中框,并选中当前行当前选中框之后的选中框
                if ($(this).val() == $(selectObj).val()) {
                    find = true;
                }
            }
        });
    }
      

  5.   

    改成了以行为单位来选, 
    和checkbox 的ID没关系  
    <table  id="tb1" width="100%" cellpadding="0" cellspacing="0" border="1">
       <tr><td>aaa</td><td>bbb</td><td>ccc</td><td>ddd</td></tr>
    </table>
    <script>
    var tb=document.getElementById('tb1');
    function add(rowCount){
     var rs=tb.rows,ii=0,cs=tb.rows[0].cells.length;
     for(var i=0;i<rowCount;i++){
        var r=tb.insertRow(-1);
      for(var j=0;j<cs;j++){
      r.insertCell(-1).appendChild( cEl('input',{type:'checkbox',value:ii,id: 'ch'+ ii++  }  )  );
      }
     }
    }
    function cEl(tag,attrs){
    var el=document.createElement(tag);
    for(var k in attrs) el[k]=attrs[k]
      return el
    }
    add(10);//生成测试数据 
    /////////////////////////////////////////
    function getP(el,td){
    while( el&& el.tagName!= td.toUpperCase()) el= el.parentNode;
    return el;
    }var actCh,
    chs=tb.getElementsByTagName('input'),L=chs.length;
    while(L--)chs[L].i=L;
    tb.onclick=function(evt){
    evt=window.event||evt;
    var el=evt.srcElement||evt.target;
    var ch=getP(el,'tr');   if(actCh &&  evt.shiftKey ) selChs(ch)
     
      actCh&&(actCh.bgColor='#ffffff');
      ch.bgColor='#eaeaff';
    actCh=ch;}
    function selChs(ch){
      var rs=[actCh,ch].sort(function(a,b){ return a.rowIndex-b.rowIndex})
      var idx=rs[0].getElementsByTagName('input')[0].i,
          L=(rs[1].rowIndex-rs[0].rowIndex+1)*rs[0].cells.length;
      while(L--)  chs[L+idx].checked= !chs[L+idx].checked;
    }
    </script>
      

  6.   

    楼主应该把你的html代码放出来,感觉这并非是在table里布局。
    如果是在div里给定一个class是可以实现多选的。