原生js实现表格行列交换、内容交换

2018-09-13  本文已影响0人  lwz4070
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
       .containe{
          margin-top: 100px;
          margin-left: 100px;
          user-select: none;/*禁止复制*/
       }
       table{
         width: 400px;
         min-height: 40px; 
         line-height: 40px; 
         text-align: center; 
         border-collapse: collapse;
       }
       table,th,td{
         border: 1px solid #000
       }
    </style>
</head>
<body>
   <div class="containe">
      <table id="table">
         <tr>
            <th>A</th>
            <th>B</th>
            <th>C</th>
            <th>D</th>
         </tr>
         <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
            <td>4</td>
         </tr>
         <tr>
            <td>5</td>
            <td>6</td>
            <td>7</td>
            <td>8</td>
         </tr>
         <tr>
            <td>9</td>
            <td>10</td>
            <td>11</td>
            <td>12</td>
         </tr>
         <tr>
            <td>13</td>
            <td>14</td>
            <td>15</td>
            <td>16</td>
         </tr>
      </table>
   </div>
   <script type="text/javascript">
      
      var oTable = document.getElementById("table");
      //格子内容交换
      var content = null;
      var contentHtml = null;
      
      //行交换
      var thNode = null;
      var thNodeHtml = null;
      
      //列交换
      var startIndex = 0;
      var endIndex = 0;
      var trNodes = oTable.children[0].children;
      var startNodeHtml = [];


      //利用事件代理触发鼠标事件
      oTable.onmousedown = function(e) {
        var e = e || window.e;
        content = e.target;  //当前事件对象
        if(content.nodeName.toLocaleLowerCase() != 'th') {
          contentHtml = content.innerHTML; 
        }else {
            //行交换所用
            thNode = content.parentNode;
            thNodeHtml = thNode.innerHTML;
            //列交换所用
            startIndex = e.srcElement.cellIndex; //获取初始被触发的th索引值
        }
      }
      oTable.onmouseup = function(e) {
        var e = e || window.e;
        if(content.nodeName.toLocaleLowerCase() != 'th') {
           //格子内容交换
          content.innerHTML = e.target.innerHTML; 
          e.target.innerHTML = contentHtml;
        }else {
            if(e.target.nodeName.toLocaleLowerCase() == 'td') {
                //行交换
                thNode.innerHTML = e.target.parentNode.innerHTML;
                e.target.parentNode.innerHTML = thNodeHtml;
            }else if(e.target.nodeName.toLocaleLowerCase() == 'th') {
                //列交换
                endIndex = e.srcElement.cellIndex; ////获取结束被触发的th索引值
                for(var i = 0; i < trNodes.length; i++) { //文本内容替换
                   var temp = trNodes[i].children[startIndex].innerHTML;
                   trNodes[i].children[startIndex].innerHTML = trNodes[i].children[endIndex].innerHTML;
                   trNodes[i].children[endIndex].innerHTML = temp;
               }
            }
        }

      }
   </script>   
</body>
</html>
上一篇 下一篇

猜你喜欢

热点阅读