数据表 - 单元格字符串截断

Posted

技术标签:

【中文标题】数据表 - 单元格字符串截断【英文标题】:Datatable - Cell string truncate 【发布时间】:2015-10-26 21:31:01 【问题描述】:

我正在使用 jQuery DataTables 显示表格中的数据,并使用 AJAX 链接加载表格内容,该链接指向已嵌入对象的文件 JSON

我有一列,其中包含一个字符串,我想为其指定格式,并且我想切断链并添加三个最后的点,以防超出字符限制。

我曾多次使用 javascript 函数完成此操作,但现在因为它将通过 JSON 加载,我不知道该怎么做

有什么建议吗?

【问题讨论】:

在带有abbreviate function的列上使用渲染函数 【参考方案1】:

解决方案

您可以使用columnDefs 使用targets 选项定位特定列,并使用render 在显示数据时呈现列内容 (type === 'display')。

演示

// Truncate a string
function strtrunc(str, max, add)
   add = add || '...';
   return (typeof str === 'string' && str.length > max ? str.substring(0, max) + add : str);
;

$(document).ready( function () 
  var table = $('#example').DataTable(
     'columnDefs': [
        
           'targets': 1,
           'render': function(data, type, full, meta)
              if(type === 'display')
                 data = strtrunc(data, 10);
              
             
              return data;
           
        
     ]
    
  );
);
<!DOCTYPE html>
<html>

<head>
<meta charset=utf-8 />
<title>jQuery DataTables</title>  
<link href="//cdn.datatables.net/1.10.7/css/jquery.dataTables.min.css" rel="stylesheet" type="text/css" />
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="http://cdn.datatables.net/1.10.7/js/jquery.dataTables.min.js"></script>
</head>
  
<body>
<table id="example" class="display" >
<thead>
<tr>
  <th>Name</th>
  <th>Position</th>
  <th>Office</th>
  <th>Age</th>
  <th>Start date</th>
  <th>Salary</th>
</tr>
</thead>

<tfoot>
<tr>
  <th>Name</th>
  <th>Position</th>
  <th>Office</th>
  <th>Age</th>
  <th>Start date</th>
  <th>Salary</th>
</tr>
</tfoot>

<tbody>
<tr>
  <td>Tiger Nixon</td>
  <td>System Architect</td>
  <td>Edinburgh</td>
  <td>61</td>
  <td>2011/04/25</td>
  <td>$3,120</td>
</tr>
<tr>
  <td>Garrett Winters</td>
  <td>Director</td>
  <td>Edinburgh</td>
  <td>63</td>
  <td>2011/07/25</td>
  <td>$5,300</td>
</tr>
<tr>
  <td>Ashton Cox</td>
  <td>Technical Author</td>
  <td>San Francisco</td>
  <td>66</td>
  <td>2009/01/12</td>
  <td>$4,800</td>
</tr>
<tr>
  <td>Cedric Kelly</td>
  <td>Javascript Developer</td>
  <td>Edinburgh</td>
  <td>22</td>
  <td>2012/03/29</td>
  <td>$3,600</td>
</tr>
<tr>
  <td>Jenna Elliott</td>
  <td>Financial Controller</td>
  <td>Edinburgh</td>
  <td>33</td>
  <td>2008/11/28</td>
  <td>$5,300</td>
</tr>
<tr>
  <td>Brielle Williamson</td>
  <td>Integration Specialist</td>
  <td>New York</td>
  <td>61</td>
  <td>2012/12/02</td>
  <td>$4,525</td>
</tr>
<tr>
  <td>Herrod Chandler</td>
  <td>Sales Assistant</td>
  <td>San Francisco</td>
  <td>59</td>
  <td>2012/08/06</td>
  <td>$4,080</td>
</tr>
<tr>
  <td>Rhona Davidson</td>
  <td>Integration Specialist</td>
  <td>Edinburgh</td>
  <td>55</td>
  <td>2010/10/14</td>
  <td>$6,730</td>
</tr>
<tr>
  <td>Colleen Hurst</td>
  <td>Javascript Developer</td>
  <td>San Francisco</td>
  <td>39</td>
  <td>2009/09/15</td>
  <td>$5,000</td>
</tr>
<tr>
  <td>Sonya Frost</td>
  <td>Software Engineer</td>
  <td>Edinburgh</td>
  <td>23</td>
  <td>2008/12/13</td>
  <td>$3,600</td>
</tr>
<tr>
  <td>Jena Gaines</td>
  <td>System Architect</td>
  <td>London</td>
  <td>30</td>
  <td>2008/12/19</td>
  <td>$5,000</td>
</tr>
<tr>
  <td>Quinn Flynn</td>
  <td>Financial Controller</td>
  <td>Edinburgh</td>
  <td>22</td>
  <td>2013/03/03</td>
  <td>$4,200</td>
</tr>
<tr>
  <td>Charde Marshall</td>
  <td>Regional Director</td>
  <td>San Francisco</td>
  <td>36</td>
  <td>2008/10/16</td>
  <td>$5,300</td>
</tr>
<tr>
  <td>Haley Kennedy</td>
  <td>Senior Marketing Designer</td>
  <td>London</td>
  <td>43</td>
  <td>2012/12/18</td>
  <td>$4,800</td>
</tr>
<tr>
  <td>Tatyana Fitzpatrick</td>
  <td>Regional Director</td>
  <td>London</td>
  <td>19</td>
  <td>2010/03/17</td>
  <td>$2,875</td>
</tr>
<tr>
  <td>Michael Silva</td>
  <td>Senior Marketing Designer</td>
  <td>London</td>
  <td>66</td>
  <td>2012/11/27</td>
  <td>$3,750</td>
</tr>
<tr>
  <td>Paul Byrd</td>
  <td>Javascript Developer</td>
  <td>New York</td>
  <td>64</td>
  <td>2010/06/09</td>
  <td>$5,000</td>
</tr>
<tr>
  <td>Gloria Little</td>
  <td>Systems Administrator</td>
  <td>New York</td>
  <td>59</td>
  <td>2009/04/10</td>
  <td>$3,120</td>
</tr>
<tr>
  <td>Bradley Greer</td>
  <td>Software Engineer</td>
  <td>London</td>
  <td>41</td>
  <td>2012/10/13</td>
  <td>$3,120</td>
</tr>
<tr>
  <td>Dai Rios</td>
  <td>System Architect</td>
  <td>Edinburgh</td>
  <td>35</td>
  <td>2012/09/26</td>
  <td>$4,200</td>
</tr>
<tr>
  <td>Jenette Caldwell</td>
  <td>Financial Controller</td>
  <td>New York</td>
  <td>30</td>
  <td>2011/09/03</td>
  <td>$4,965</td>
</tr>
<tr>
  <td>Yuri Berry</td>
  <td>System Architect</td>
  <td>New York</td>
  <td>40</td>
  <td>2009/06/25</td>
  <td>$3,600</td>
</tr>
<tr>
  <td>Caesar Vance</td>
  <td>Technical Author</td>
  <td>New York</td>
  <td>21</td>
  <td>2011/12/12</td>
  <td>$4,965</td>
</tr>
<tr>
  <td>Doris Wilder</td>
  <td>Sales Assistant</td>
  <td>Edinburgh</td>
  <td>23</td>
  <td>2010/09/20</td>
  <td>$4,965</td>
</tr>
<tr>
  <td>Angelica Ramos</td>
  <td>System Architect</td>
  <td>London</td>
  <td>36</td>
  <td>2009/10/09</td>
  <td>$2,875</td>
</tr>
<tr>
  <td>Gavin Joyce</td>
  <td>Developer</td>
  <td>Edinburgh</td>
  <td>42</td>
  <td>2010/12/22</td>
  <td>$4,525</td>
</tr>
<tr>
  <td>Jennifer Chang</td>
  <td>Regional Director</td>
  <td>London</td>
  <td>28</td>
  <td>2010/11/14</td>
  <td>$4,080</td>
</tr>
<tr>
  <td>Brenden Wagner</td>
  <td>Software Engineer</td>
  <td>San Francisco</td>
  <td>18</td>
  <td>2011/06/07</td>
  <td>$3,750</td>
</tr>
<tr>
  <td>Ebony Grimes</td>
  <td>Software Engineer</td>
  <td>San Francisco</td>
  <td>48</td>
  <td>2010/03/11</td>
  <td>$2,875</td>
</tr>
<tr>
  <td>Russell Chavez</td>
  <td>Director</td>
  <td>Edinburgh</td>
  <td>20</td>
  <td>2011/08/14</td>
  <td>$3,600</td>
</tr>
<tr>
  <td>Michelle House</td>
  <td>Integration Specialist</td>
  <td>Edinburgh</td>
  <td>37</td>
  <td>2011/06/02</td>
  <td>$3,750</td>
</tr>
<tr>
  <td>Suki Burks</td>
  <td>Developer</td>
  <td>London</td>
  <td>53</td>
  <td>2009/10/22</td>
  <td>$2,875</td>
</tr>
<tr>
  <td>Prescott Bartlett</td>
  <td>Technical Author</td>
  <td>London</td>
  <td>27</td>
  <td>2011/05/07</td>
  <td>$6,730</td>
</tr>
<tr>
  <td>Gavin Cortez</td>
  <td>Technical Author</td>
  <td>San Francisco</td>
  <td>22</td>
  <td>2008/10/26</td>
  <td>$6,730</td>
</tr>
<tr>
  <td>Martena Mccray</td>
  <td>Integration Specialist</td>
  <td>Edinburgh</td>
  <td>46</td>
  <td>2011/03/09</td>
  <td>$4,080</td>
</tr>
<tr>
  <td>Unity Butler</td>
  <td>Senior Marketing Designer</td>
  <td>San Francisco</td>
  <td>47</td>
  <td>2009/12/09</td>
  <td>$3,750</td>
</tr>
<tr>
  <td>Howard Hatfield</td>
  <td>Financial Controller</td>
  <td>San Francisco</td>
  <td>51</td>
  <td>2008/12/16</td>
  <td>$4,080</td>
</tr>
<tr>
  <td>Hope Fuentes</td>
  <td>Financial Controller</td>
  <td>San Francisco</td>
  <td>41</td>
  <td>2010/02/12</td>
  <td>$4,200</td>
</tr>
<tr>
  <td>Vivian Harrell</td>
  <td>System Architect</td>
  <td>San Francisco</td>
  <td>62</td>
  <td>2009/02/14</td>
  <td>$4,965</td>
</tr>
<tr>
  <td>Timothy Mooney</td>
  <td>Financial Controller</td>
  <td>London</td>
  <td>37</td>
  <td>2008/12/11</td>
  <td>$4,200</td>
</tr>
<tr>
  <td>Jackson Bradshaw</td>
  <td>Director</td>
  <td>New York</td>
  <td>65</td>
  <td>2008/09/26</td>
  <td>$5,000</td>
</tr>
<tr>
  <td>Miriam Weiss</td>
  <td>Support Engineer</td>
  <td>Edinburgh</td>
  <td>64</td>
  <td>2011/02/03</td>
  <td>$4,965</td>
</tr>
<tr>
  <td>Bruno Nash</td>
  <td>Software Engineer</td>
  <td>London</td>
  <td>38</td>
  <td>2011/05/03</td>
  <td>$4,200</td>
</tr>
<tr>
  <td>Odessa Jackson</td>
  <td>Support Engineer</td>
  <td>Edinburgh</td>
  <td>37</td>
  <td>2009/08/19</td>
  <td>$3,600</td>
</tr>
<tr>
  <td>Thor Walton</td>
  <td>Developer</td>
  <td>New York</td>
  <td>61</td>
  <td>2013/08/11</td>
  <td>$3,600</td>
</tr>
<tr>
  <td>Finn Camacho</td>
  <td>Support Engineer</td>
  <td>San Francisco</td>
  <td>47</td>
  <td>2009/07/07</td>
  <td>$4,800</td>
</tr>
<tr>
  <td>Elton Baldwin</td>
  <td>Data Coordinator</td>
  <td>Edinburgh</td>
  <td>64</td>
  <td>2012/04/09</td>
  <td>$6,730</td>
</tr>
<tr>
  <td>Zenaida Frank</td>
  <td>Software Engineer</td>
  <td>New York</td>
  <td>63</td>
  <td>2010/01/04</td>
  <td>$4,800</td>
</tr>
<tr>
  <td>Zorita Serrano</td>
  <td>Software Engineer</td>
  <td>San Francisco</td>
  <td>56</td>
  <td>2012/06/01</td>
  <td>$5,300</td>
</tr>
<tr>
  <td>Jennifer Acosta</td>
  <td>Javascript Developer</td>
  <td>Edinburgh</td>
  <td>43</td>
  <td>2013/02/01</td>
  <td>$2,875</td>
</tr>
<tr>
  <td>Cara Stevens</td>
  <td>Sales Assistant</td>
  <td>New York</td>
  <td>46</td>
  <td>2011/12/06</td>
  <td>$4,800</td>
</tr>
<tr>
  <td>Hermione Butler</td>
  <td>Director</td>
  <td>London</td>
  <td>47</td>
  <td>2011/03/21</td>
  <td>$4,080</td>
</tr>
<tr>
  <td>Lael Greer</td>
  <td>Systems Administrator</td>
  <td>London</td>
  <td>21</td>
  <td>2009/02/27</td>
  <td>$3,120</td>
</tr>
<tr>
  <td>Jonas Alexander</td>
  <td>Developer</td>
  <td>San Francisco</td>
  <td>30</td>
  <td>2010/07/14</td>
  <td>$5,300</td>
</tr>
<tr>
  <td>Shad Decker</td>
  <td>Regional Director</td>
  <td>Edinburgh</td>
  <td>51</td>
  <td>2008/11/13</td>
  <td>$5,300</td>
</tr>
<tr>
  <td>Michael Bruce</td>
  <td>Javascript Developer</td>
  <td>Edinburgh</td>
  <td>29</td>
  <td>2011/06/27</td>
  <td>$4,080</td>
</tr>
<tr>
  <td>Donna Snider</td>
  <td>System Architect</td>
  <td>New York</td>
  <td>27</td>
  <td>2011/01/25</td>
  <td>$3,120</td>
</tr>
</tbody>
</table>
</body>
</html>

【讨论】:

【参考方案2】:

可以使用渲染限制内容


    data:'content_body',
    render: function(data)
        if(data)
            return (data.length > 200)?data.substring(0, 200)+'...':data;
         else 
            return '';
        
    ,
,

【讨论】:

【参考方案3】:

我遇到了同样的问题并使用 mRender 解决了它

"mRender": function(data, type, row) 
    var trimmedString = data.substring(0, 6);
    return trimmedString + '...';
  

【讨论】:

【参考方案4】:

也许您可以使用名为 ellipsis 的插件(作者:Allan Jardine)。 Here你可以找到更多信息。

https://datatables.net/plug-ins/dataRender/ellipsis

【讨论】:

以上是关于数据表 - 单元格字符串截断的主要内容,如果未能解决你的问题,请参考以下文章

在单元格中使用换行符导入 ods

如何获得一个 WPF 数据网格,其中包含环绕文本而不是截断文本的单元格?

用空格填充单词以填充单元格

UITableView 单元格标签在滚动时截断

动态表格单元格高度(内容截断)

调整 UITableViewCell 高度