【问题标题】:How to set column widths to a jQuery datatable?如何将列宽设置为 jQuery 数据表?
【发布时间】:2011-08-01 05:42:56
【问题描述】:

我有一个 jQuery 数据表(以红色标出),但发生的情况是表格超出了我为 div 设置的宽度(即 650 像素)。

这是屏幕截图:

这是我的代码:

<script type="text/javascript">

    var ratesandcharges1;

    $(document).ready(function() {

        /* Init the table*/
        $("#ratesandcharges1").dataTable({
            "bRetrieve": false,
            "bFilter": false,
            "bSortClasses": false,
            "bLengthChange": false,
            "bPaginate": false,
            "bInfo": false,
            "bJQueryUI": true,
            "bAutoWidth": false,
            "aaSorting": [[2, "desc"]],
            "aoColumns": [
            { sWidth: '9%' },
            { sWidth: '9%' },
            { sWidth: '9%' },
            { sWidth: '9%' },
            { sWidth: '9%' },
            { sWidth: '9%' },
            { sWidth: '9%' },
            { sWidth: '9%' },
            { sWidth: '9%' },
            { sWidth: '9%' },
            { sWidth: '10%' } ]
        });

        ratesandcharges1.fnDraw();

    });
</script>
<div id="ratesandcharges1Div" style="width: 650px;"> 


<table id="ratesandcharges1" class="grid" >
    <thead>
        <!--Header row-->
        <tr>
            <th>Charge Code</th>
            <th>Rates</th>
            <th>Quantity</th>
            <th>Total Charge</th>
            <th>VAT %</th>
            <th>Calc. Type</th>
            <th>Paid By</th>
            <th>From</th>
            <th>To</th>
            <th>VAT</th>
            <th>MVGB</th>
         </tr>
    </thead>
    <!--Data row-->
    <tbody>
        <tr>
            <td>Day/Tag</td>
            <td>55.00</td>
            <td>3.00</td>
            <td>165.00</td>
            <td>20.00</td>
            <td>Rental Time</td>
            <td>Bill-to/Agent</td>
            <td>5/11/2010</td>
            <td>08/11/2010</td>
            <td>33.00</td>
            <td>1.98</td>
        </tr>
        <tr>
            <td>PAI</td>
            <td>7.50</td>
            <td>3.00</td>
            <td>22.50</td>
            <td>20.00</td>
            <td>Rental Time</td>
            <td>Driver/Cust.</td>
            <td>5/11/2010</td>
            <td>08/11/2010</td>
            <td>4.50</td>
            <td>0.00</td>
        </tr>
        <tr>
            <td>BCDW</td>
            <td>15.00</td>
            <td>3.00</td>
            <td>45.00</td>
            <td>20.00</td>
            <td>Rental Time</td>
            <td>Driver/Cust.</td>
            <td>5/11/2010</td>
            <td>08/11/2010</td>
            <td>9.00</td>
            <td>0.54</td>
        </tr>
        <tr>
            <td>BTP</td>
            <td>7.15</td>
            <td>3.00</td>
            <td>21.45</td>
            <td>20.00</td>
            <td>Rental Time</td>
            <td>Driver/Cust.</td>
            <td>5/11/2010</td>
            <td>08/11/2010</td>
            <td>4.29</td>
            <td>0.26</td>
        </tr>
    </tbody>
</table>
</div>    

有什么想法吗?

谢谢

【问题讨论】:

  • 你试过用width="650px"而不是style="width: 650px;"

标签: jquery jquery-ui datatables


【解决方案1】:

我在 456 Bera St. Man 找到了这个。它是救生员吗!!!

http://www.456bereastreet.com/archive/200704/how_to_prevent_html_tables_from_becoming_too_wide/

但是 - 您没有足够的空间来处理您的数据。

CSS FTW:

<style>
table {
    table-layout:fixed;
}
td{
    overflow:hidden;
    text-overflow: ellipsis;
}
</style>

【讨论】:

  • 这解决了问题。不幸的是,设置选项不起作用,所以我欢迎这个修复。
  • 太棒了!我不知道为什么,但是如果没有上面的样式,我的代码 $('#revTable').dataTable( { "columns": [ { "width": "8%" }, { "width": "12%" }, { "width": "17%" }, { "width": "10%" }, { "width": "15%" }, { "width": "12%" }, { "width": "8%" } ] } ); 将无法工作。谢谢。
  • 如果我错了,请纠正我。使用这种方法肯定会替换掉多余的数据并用省略号替换,但整个数据只显示在一个甚至无法选择的工具提示中。如果这是正确的,如果有什么方法可以建议使整个文本可选择,我必须在我的项目中实施类似的解决方案?
【解决方案2】:

配置选项:

$(document).ready(function () {

  $("#companiesTable").dataTable({
    "sPaginationType": "full_numbers",
    "bJQueryUI": true,
    "bAutoWidth": false, // Disable the auto width calculation 
    "aoColumns": [
      { "sWidth": "30%" }, // 1st column width 
      { "sWidth": "30%" }, // 2nd column width 
      { "sWidth": "40%" } // 3rd column width and so on 
    ]
  });
});

指定表格的css:

table.display {
  margin: 0 auto;
  width: 100%;
  clear: both;
  border-collapse: collapse;
  table-layout: fixed;         // add this 
  word-wrap:break-word;        // add this 
}

HTML:

<table id="companiesTable" class="display"> 
  <thead>
    <tr>
      <th>Company name</th>
      <th>Address</th>
      <th>Town</th>
    </tr>
  </thead>
  <tbody>

    <% for(Company c: DataRepository.GetCompanies()){ %>
      <tr>  
        <td><%=c.getName()%></td>
        <td><%=c.getAddress()%></td>
        <td><%=c.getTown()%></td>
      </tr>
    <% } %>

  </tbody>
</table>

它对我有用!

【讨论】:

  • 正是我需要的:配置选项。
  • 我怎样才能只在第三列分配宽度?
  • 非常适合旧版数据表。
【解决方案3】:

尝试设置表格本身的宽度:

<table id="ratesandcharges1" class="grid" style="width: 650px;">

您必须将 650 调整几个像素以考虑您拥有的任何填充、边距和边框。

不过,您可能仍然会遇到一些问题。如果不破坏标题、减小字体大小或其他一些丑陋之处,我看不到所有这些列的足够水平空间。

【讨论】:

  • 是的,我试过了。在浏览器中仍然是相同的结果。是否可以将宽度设置为 650px 并使数据表可从左到右滚动以查看最右侧的内容。感谢您的回复。
  • 您可以将overflow-x: auto 放在#ratesandcharges1Div 上,这样会在周围的&lt;div&gt; 上放置一个水平滚动条。
  • 我也遇到了同样的问题。 overflow-x: auto 做了它应该做的,但是改变表格的宽度没有效果。
【解决方案4】:

在尝试了所有其他解决方案之后,我发现这对我有用的最佳解决方案...... 基本上我将 sScrollX 设置为 200%,然后将各个列的宽度设置为我想要的所需百分比。您拥有的列越多,需要的空间就越多,那么您需要提高 sScrollX %... null 表示我希望这些列保留它们在代码中设置的数据表自动宽度。

            $('#datatables').dataTable
            ({  
                "sScrollX": "200%", //This is what made my columns increase in size.
                "bScrollCollapse": true,
                "sScrollY": "320px",

                "bAutoWidth": false,
                "aoColumns": [
                    { "sWidth": "10%" }, // 1st column width 
                    { "sWidth": "null" }, // 2nd column width 
                    { "sWidth": "null" }, // 3rd column width
                    { "sWidth": "null" }, // 4th column width 
                    { "sWidth": "40%" }, // 5th column width 
                    { "sWidth": "null" }, // 6th column width
                    { "sWidth": "null" }, // 7th column width 
                    { "sWidth": "10%" }, // 8th column width 
                    { "sWidth": "10%" }, // 9th column width
                    { "sWidth": "40%" }, // 10th column width
                    { "sWidth": "null" } // 11th column width
                    ],
                "bPaginate": true,              
                "sDom": '<"H"TCfr>t<"F"ip>',
                "oTableTools": 
                {
                    "aButtons": [ "copy", "csv", "print", "xls", "pdf" ],
                    "sSwfPath": "copy_cvs_xls_pdf.swf"
                },
                "sPaginationType":"full_numbers",
                "aaSorting":[[0, "desc"]],
                "bJQueryUI":true    

            });

【讨论】:

    【解决方案5】:

    官网回答

    https://datatables.net/reference/option/columns.width

    $('#example').dataTable({
        "columnDefs": [
            {
                "width": "20%",
                "targets": 0
            }
        ]
    });
    

    【讨论】:

      【解决方案6】:

      在 java 脚本中使用以下代码计算宽度

      var scrollX = $(window).width()*58/100;
      var oTable = $('#reqAllRequestsTable').dataTable({
          "sScrollX": scrollX
          } );
      

      【讨论】:

        【解决方案7】:

        通过使用 css,我们可以轻松地为列添加宽度。

        这里我在标题 (thead) 上将第一列宽度添加到 300 像素

        ::ng-deep  table thead tr:last-child th:nth-child(1) {
            width: 300px!important;
        }

        现在为 tbody 的第一列添加相同的宽度,

          <table datatable class="display table ">
                    <thead>
                    <tr>
                        <th class="text-left" style="width: 300px!important;">name</th>
                    </tr>
                    </thead>
                    <tbody>
                   
                    <tr>
                        <td class="text-left" style="width: 300px!important;">jhon mathew</td>
                        
                    </tr>
                    </tbody>
                </table>
               

        通过这种方式,您可以通过更改第 n 个孩子的顺序来轻松更改宽度。 如果你想要 3 列,则添加 nth-child(3)

        【讨论】:

          猜你喜欢
          • 2017-02-07
          • 2013-11-18
          • 2020-02-16
          • 1970-01-01
          • 2018-03-28
          • 1970-01-01
          • 2011-11-01
          • 2022-12-17
          • 2019-08-08
          相关资源
          最近更新 更多