【问题标题】:Jquery Datatables Add new row button inside table as a rowJquery Datatables在表内添加新行按钮作为一行
【发布时间】:2017-02-27 23:41:40
【问题描述】:

我正在使用:jquery.dataTables.js 来自:https://datatables.net

我怎样才能使这个按钮添加新行在表格内作为一行?现在在桌子外面

jsfiddle:http://jsfiddle.net/5L2qy092/4/

html:

<table id="example" class="display" width="100%" cellspacing="0">
  <thead>
    <tr>
      <th>order</th>
      <th>name</th>
      <th>country</th>
      <th>delete</th>
    </tr>
  </thead>
</table>

<button id="addRow">Add New Row</button>
<table id="newRow">
  <tbody>
    <tr>
      <td>Line 2
        <input type="hidden" value="2" /> </td>
      <td>DVap
        <input type="hidden" value="DVap" /> </td>
      <td>
        <input type="text" value="22" /> </td>
      <td>
        <i class="fa fa-minus-square" aria-hidden="true"></i>  </td>
    </tr>
  </tbody>
</table>

jquery:

 $(document).ready(function() {
    var dt = $('#example').dataTable();
    dt.fnDestroy();
  });

  $(document).ready(function() {
    //var url = 'http://www.json-generator.com/api/json/get/ckDfqBChNK?indent=2';
    var url = 'http://www.json-generator.com/api/json/get/bQzyuEGndu?indent=2';
    var table = $('#example').DataTable({
      ajax: url,
      rowReorder: {
        dataSrc: 'order',
      },
      columns: [{
        data: 'order'
      }, {
        data: 'place'
      }, {
        data: 'name'
      }, {
        data: 'delete'
      }],
      "initComplete": function(oSettings) {
        $(this).on('click', "i.fa.fa-minus-square", function(e) {
          table.row( $(this).closest('tr') ).remove().draw();
        });
      }
    });

    // add row
    $('#addRow').click(function() {
      //t.row.add( [1,2,3] ).draw();
      var rowHtml = $("#newRow").find("tr")[0].outerHTML
      console.log(rowHtml);
      table.row.add($(rowHtml)).draw();
    });
  });

【问题讨论】:

    标签: jquery datatables


    【解决方案1】:

    如果您希望button 成为new row 中的new row,您可以使用我的第一个答案。

    但是,在这种情况下,我们将不得不处理排序、删除等问题。

    我认为最好“模拟”一个新行。像这样:

    $(document).ready(function() {
        var dt = $('#example').dataTable();
        dt.fnDestroy();
      });
    
      $(document).ready(function() {
        //var url = 'http://www.json-generator.com/api/json/get/ckDfqBChNK?indent=2';
        var url = 'http://www.json-generator.com/api/json/get/bQzyuEGndu?indent=2';
        var table = $('#example').DataTable({
          ajax: url,
          rowReorder: {
            dataSrc: 'order'
          },
          columns: [{
            data: 'order'
          }, {
            data: 'place'
          }, {
            data: 'name'
          }, {
            data: 'delete'
          }],
          
          "initComplete": function(oSettings) {
          
            $(this).on('click', "i.fa.fa-minus-square", function(e) {
              
              table.row( $(this).closest('tr') ).remove().draw();
               
            });
         
          
          }
          
        });
        
        $('#example').css('border-bottom', 'none');
        $('<div class="addRow"><button id="addRow">Add New Row</button></div>').insertAfter('#example');
        $('#addRow').on('click', function() {
            
              var rowHtml = $("#newRow").find("tr")[0].outerHTML
    
              table.row.add($(rowHtml)).draw();
              
              table.page( 'last' ).draw( 'page' );
            
            });
       
      });
    table#newRow {
      display: none
    }
    
    div.addRow {
        line-height: 45px;
        background-color: #fff;
        padding-left: 10px;
        border-bottom: 1px solid;
        border-top: 1px solid #e5e5e5;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
    
    <script src="https://cdn.datatables.net/rowreorder/1.2.0/js/dataTables.rowReorder.min.js"></script>
    
    <link href="https://cdn.datatables.net/1.10.12/css/jquery.dataTables.css" rel="stylesheet"/>
    
    <link href="https://cdn.datatables.net/rowreorder/1.2.0/css/rowReorder.dataTables.min.css" rel="stylesheet"/>
    
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
    
    
    <table id="example" class="display" width="100%" cellspacing="0">
      <thead>
        <tr>
          <th>order</th>
          <th>name</th>
          <th>country</th>
          <th>delete</th>
        </tr>
      </thead>
    </table>
    
    <table id="newRow">
      <tbody>
        <tr>
          <td>Line 2
            <input type="hidden" value="2" /> </td>
          <td>DVap
            <input type="hidden" value="DVap" /> </td>
          <td>
            <input type="text" value="22" /> </td>
          <td>
            <i class="fa fa-minus-square" aria-hidden="true"></i>  </td>
        </tr>
      </tbody>
    </table>

    【讨论】:

      【解决方案2】:

      我对 Fiddle 做了一些改动,看看是不是你想要的结果。

       $(document).ready(function() {
      //var url = 'http://www.json-generator.com/api/json/get/ckDfqBChNK?indent=2';
      var url = 'http://www.json-generator.com/api/json/get/bQzyuEGndu?indent=2';
      var table = $('#example').DataTable({
        ajax: url,
        rowReorder: {
          dataSrc: 'order'
        },
        columns: [{
          data: 'order'
        }, {
          data: 'place'
        }, {
          data: 'name'
        }, {
          data: 'delete'
        }],
      
         "fnDrawCallback": function() {
          try {addRow();} catch(e) {}
      },
      
        "initComplete": function(oSettings) {
      
          $(this).on('click', "i.fa.fa-minus-square", function(e) {
      
            table.row( $(this).closest('tr') ).remove().draw();
      
            addRow();
      
          }).on('click', '#addRow', function() {
      
            var rowHtml = $("#newRow").find("tr")[0].outerHTML
      
            table.row.add($(rowHtml)).draw();
      
            addRow();
      
          });
      
         addRow();
      
        }
      
      });
      
      
      function addRow() {
      
         table.rows().eq(0).each( function ( i ) {
         var row = table.row( i );
         row.child.remove();
         });
      
          var line = table.row( $('#example').find('tr:last') );  
      
          line.child('<button id="addRow">Add New Row</button>').show(); 
      
         }
      
       });
      

      http://jsfiddle.net/Leon_Klaj/9grm4wdc/

      【讨论】:

      • 感谢您,但您的示例存在一些问题:首先:如果添加 2 行并尝试删除添加新按钮添加新行,如果我在添加之前删除一行单击按钮,则删除按钮和行。
      • 我觉得现在可以了,看看吧。
      • 很酷,谢谢你,如果你不介意的话,还有一件事:),如果我向上拖动行,按钮会随着行向上,这个按钮应该总是固定在底部:) ,非常感谢你的帮助兄弟
      • 那是因为按钮是最后一行的子按钮。所以我们必须处理所有的桌子平局。我更新并相信现在没问题。看看我的第二个答案,这可能是一个更好的方法。
      猜你喜欢
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      相关资源
      最近更新 更多