2017-02-22 31 views
1

我使用DataTables jQuery来制作漂亮的表格和python的变形,用于从模式中轻松生成我的表单元素。 DataTables导出功能对生成的表单元素不起作用。DataTables为复杂的HTML导出(python变形)

因此,我需要使用DataTables' export function来正确生成我的出口。在我的应用程序中实际上可以考虑四种类型的单元格(按照日益复杂的顺序排列),并且该功能需要处理所有这些单元格。

首先,一个标准<input>。这里预计产量将只是with some brand

<input name="brand" value="with some brand" id="deformField1168" class=" form-control " type="text"> 

其次,一个textarea(这实际上是唯一一个数据表默认情况下正确处理,因为它strips away HTML to get 'only text contents')。这里预计产量将a short description

<textarea id="deformField1169" name="description" rows="2" class=" form-control ">a short description</textarea> 

第三,我用它来放置一个垃圾桶/在单元的一侧删除图标的div的堆栈,否则这是一样的首例。如果这是唯一无法解决的情况,我不介意将图标移动到它自己的单元格,这种方式更加丑陋。这里预计产量将a_test_item

<div style="float: left; width: 85%; text-align: left"> 
    <input name="item_number" value="a_test_item" id="deformField1167" class=" form-control " type="text"> 
</div> 
<div style="float: right; width: 15%; text-align: right"> 
    <form class="form" action="" method="post" accept-charset="utf-8" enctype="multipart/form-data"> 
     <input name="id" value="1" type="hidden"> 
     <button type="submit" class="btn btn-default" name="delete"> 
      <span class="glyphicon glyphicon-trash"> 
     </span></button> 
    </form> 
</div> 

第四,最后,这套隐藏输入+ JavaScript的,它会弹出一个日期选择器。这里预计产量将2017-03-07

<input name="__start__" value="delivery_date:mapping" type="hidden"> 
<input name="date" value="2017-03-07" id="deformField1171" class=" form-control hasDatepicker" type="date"> 
<input name="__end__" value="delivery_date:mapping" type="hidden"> 
<script type="text/javascript"> 
    deform.addCallback(
    'deformField1171', 
    function deform_cb(oid) { 
     if (!Modernizr.inputtypes['date'] ||"date" != "date" || window.forceDateTimePolyfill){ 
     $('#' + oid).pickadate({"format": "yyyy-mm-dd", "selectMonths": true, "selectYears": true, "formatSubmit": "yyyy-mm-dd"}); 
     } 
    } 
    ); 
</script> 

我现在exportOption功能如下: -

exportOptions: { 
    format: { 
     body: function (data, row, column, node) { 
      console.log(data) 
      return data 
     } 
    } 
} 

我从来没有使用JavaScript来处理前(只的getElementById等)字符串,它不无论如何,弦乐处理似乎都是一种方式。我可以使用这些单元格创建一个JS'页面'并使用标准的HTML访问(所有的getElement *函数)吗?

回答

0

和往常一样,输入问题的行为为我提供了帮助。基于the accepted answer here about creating a DOM from a HTML string,以及观察到所有可见输入都具有类form-control,这是我写的(令人尴尬的简单)函数。

exportOptions: { 
    format: { 
     body: function (data, row, column, node) { 
      var div = document.createElement('div') 
      div.innerHTML = data 
      var value = div.getElementsByClassName('form-control')[0].value 
      return value 
     } 
    } 
}