質問

jQuery DataTablesプラグインを使用してテーブルの幅を制御する際に問題があります。テーブルはコンテナの幅の100%であると想定されていますが、最終的にはコンテナの幅ではなく、任意の幅になります。

提案に感謝

テーブル宣言は次のようになります

<table id="querytableDatasets" class="display" cellspacing="0"
cellpadding="3"     width="100%">

そしてjavascript

jQuery('#tab-datasets').load('/cgi-bin/qryDatasets', '', function (){  
    jQuery('#querytableDatasets').dataTable({  
        "bPaginate": false,  
        "bInfo": false,  
        "bFilter": false  
    });  
});  `  

FirebugでHTMLを調べると、これが表示されます(追加されたstyle =&quot; width:0px;&quot;に注意してください)

<table id="querytableDatasets" class="display" cellspacing="0" 
cellpadding="3" width="100%" style="width: 0px;">

Firebugのスタイルを見ると、table.displayスタイルがオーバーライドされています。これがどこから来たのかわかりません

element.style {  
  width:0;}    

-- dataTables.css (line 84
table.display { 
  margin:0 auto;  
  width:100%;  
}  
役に立ちましたか?

解決

この問題は、dataTableが幅を計算する必要があるために発生します。ただし、タブ内で使用すると、表示されないため、幅を計算できません。解決策は、タブが表示されたときに「fnAdjustColumnSizing」を呼び出すことです。

プリアンブル

  

この例は、スクロール付きのDataTablesを一緒に使用する方法を示しています   jQuery UIタブ(または実際にテーブルが   初期化時に非表示(display:none)要素で)。理由   これには特別な考慮が必要です。DataTablesが   初期化され、非表示要素にあり、ブラウザにはありません   DataTablesを提供するための測定値。これには、   スクロールが有効になっているときの列の不整列。

     

これを回避する方法は、fnAdjustColumnSizing APIを呼び出すことです   関数。この関数は、列幅を計算します   現在のデータに基づいて必要なテーブルを再描画します-これは   最初にテーブルが表示されるときに必要なもの   時間。このために、jQuery UIテーブルが提供する「show」メソッドを使用します。   DataTableが作成されているかどうかを確認します(   「div.dataTables_scrollBody」の追加セレクター。これは、   DataTableが初期化されます)。テーブルが初期化されている場合、   サイズを変更します。最適化を追加して、   テーブルの最初の表示。

初期化コード

$(document).ready(function() {
    $("#tabs").tabs( {
        "show": function(event, ui) {
            var oTable = $('div.dataTables_scrollBody>table.display', ui.panel).dataTable();
            if ( oTable.length > 0 ) {
                oTable.fnAdjustColumnSizing();
            }
        }
    } );

    $('table.display').dataTable( {
        "sScrollY": "200px",
        "bScrollCollapse": true,
        "bPaginate": false,
        "bJQueryUI": true,
        "aoColumnDefs": [
            { "sWidth": "10%", "aTargets": [ -1 ] }
        ]
    } );
} );

詳細については、こちらをご覧ください。

他のヒント

dataTablesを初期化するときに、 bAutoWidth aoColumns.sWidth

の2つの変数を調整する必要があります。

幅が50px、100、120px、および30pxの4つの列があると仮定します:

jQuery('#querytableDatasets').dataTable({  
        "bPaginate": false,  
        "bInfo": false,  
        "bFilter": false,
        "bAutoWidth": false,
        "aoColumns" : [
            { sWidth: '50px' },
            { sWidth: '100px' },
            { sWidth: '120px' },
            { sWidth: '30px' }
        ]  
    }); 

dataTablesの初期化の詳細については、 http://datatables.net/usage

widhtsのこの設定と適用するCSS間の相互作用に注意してください。これを試す前に、既存のCSSにコメントを付けて、どれだけ接近するかを確認してください。

まあ、私はそのプラグインに精通していませんが、データテーブルを追加した後にスタイルをリセットできますか?次のようなもの

$("#querydatatablesets").css("width","100%")

.dataTable呼び出しの後?

jQuery('#querytableDatasets').dataTable({  
        "bAutoWidth": false
});

データテーブルの列幅に関して多くの問題がありました。私にとっての魔法の修正は、行を含めることでした

table-layout: fixed;

このcssは、テーブルのcss全体に適用されます。たとえば、次のようなデータテーブルを宣言した場合:

LoadTable = $('#LoadTable').dataTable.....

その後、マジックcss行はクラスLoadtableに入ります

#Loadtable {
margin: 0 auto;
clear: both;
width: 100%;
table-layout: fixed;

}

TokenMacGuysソリューションは、jQdataTableのバグの結果であるため、最適に機能します。起こるのは、$( '#sometabe')。dataTable()。fnDestroy()を使用すると、テーブルの幅が100%ではなく100pxに設定されることです。ここに簡単な修正があります:

$('#credentials-table').dataTable({
        "bJQueryUI": false,
        "bAutoWidth": false,
        "bDestroy": true,
        "bPaginate": false,
        "bFilter": false,
        "bInfo": false,
    "aoColumns": [
           { "sWidth": "140px" },
           { "sWidth": "300px" },
           { "sWidth": "50px" }       
        ],
        "fnInitComplete": function() {

            $("#credentials-table").css("width","100%");
        }

    });

各列に sWidth を使用して明示的に幅を設定し、 dataTable の初期化で bAutoWidth:false を使用すると、(同様の)問題が解決しました。あふれるスタックが大好きです。

固定フィールドなしで少なくとも1つのフィールドを残す必要があります。例:

$('.data-table').dataTable ({

 "bAutoWidth": false,
 "aoColumns" : [
    null,
    null,
    null,                    
    null,
    {"sWidth": "20px"},
    { "sWidth": "20px"}]
});

すべてを変更できますが、1つだけをnullのままにしておくと、ストレッチできます。 ALLに幅を付けると機能しません。今日誰か助けてくれたらいいのに!

このcssクラスをページに追加すると、問題が修正されます:

#<your_table_id> {
    width: inherit !important;
}
"fnInitComplete": function() {
    $("#datatables4_wrapper").css("width","60%");
 }

これはテーブル全体の幅を調整するためにうまく機能しました。ありがとう、ピーター・ドリンナン!

Datatable 10.1と同様、これは簡単です。 HTMLで表に幅属性を設定するだけです。 つまり、width =&quot; 100%&quot;の場合、DTによって設定されたすべてのCSSスタイルがオーバーライドされます。

こちらをご覧ください http://www.datatables.net/examples/basic_init/flexible_width。 html

ここでの解決策はどれもうまくいきませんでした。 datatablesホームページの例でも機能しませんでした。そのため、オプションを表示します。

問題の解決策を見つけました。コツは、タブにアクティブ化オプションを使用し、表示されているテーブルでfnAdjustColumnSizing()を呼び出す

$(function () {

// INIT TABS WITH DATATABLES
$("#TabsId").tabs({
    activate: function (event, ui) {
        var oTable = $('div.dataTables_scrollBody>table:visible', ui.panel).dataTable();
        if (oTable.length > 0) {
            oTable.fnAdjustColumnSizing();
        }
    }
});

// INIT DATATABLES
// options for datatables
var optDataTables = {
    "sScrollY": "200px",
    "bScrollCollapse": true,
    "bPaginate": false,
    "bJQueryUI": true,
    "aoColumnDefs": [
        { "sWidth": "10%", "aTargets": [-1] }
    ]
};
// initialize data table
$('table').dataTable(optDataTables);

});

私はあなたとまったく同じ問題を抱えていますが、Ajaxなしで通常のテーブルにJQueryを適用しただけです。何らかの理由で、Firefoxは公開後もテーブルを展開しません。テーブルをDIV内に配置し、代わりにDIVにエフェクトを適用することで問題を修正しました。

準備完了イベントでこれを実行していますか?

$(document).ready(function() { ... });

サイジングは、完全にロードされるドキュメントに依存する可能性が高いです。

固定ヘッダープラグインを使用してテーブル/セル幅を調整できない場合:

Datatablesは、列幅パラメーターのtheadタグに依存しています。これは、テーブルの内部htmlのほとんどが自動生成されるため、本当に唯一のネイティブhtmlであるためです。

ただし、発生するのは、セルの一部がtheadセル内に格納されている幅より大きくなる可能性があることです。

つまりテーブルに多くの列(幅の広いテーブル)があり、行に多くのデータがある場合、子の行がオーバーフローに基づいてtdのサイズを自動的に変更するため、「sWidth」を呼び出してtdセルサイズを適切に変更できませんこれは、テーブルが初期化され、その初期化パラメータを渡された後 発生します。

元のthead&quot; sWidth&quot ;:パラメータはオーバーライドされます(縮小)。これは、データテーブルがテーブルのデフォルト幅がまだ%100であると判断するためです。一部のセルがオーバーフローしていることを認識しません。

これを修正するために、オーバーフロー幅を把握し、テーブルが初期化された後に テーブルのサイズを適切に変更することでそれを説明しました。同時:

$(document).ready(function() {
  $('table').css('width', '120%');
  new FixedHeader(dTable, {
        "offsetTop": 40,
      });
});

&quot;成功&quot;内に固定ヘッダーを作成しますajax呼び出しの場合、ヘッダーと行に位置合わせの問題はありません。

success: function (result) {
              /* Your code goes here */

    var table = $(SampleTablename).DataTable();

        new $.fn.dataTable.FixedHeader(table);
}        

これは、まだ苦労している人を助けることを願っています。

テーブルをコンテナに入れないでください。テーブルのレンダリング後、テーブルのラッパーをコンテナにします。これは、テーブルと一緒に何か他のものがある場所では無効かもしれませんが、そのコンテンツをいつでも戻すことができます。

私にとって、この問題は、サイドバーと、実際にそのサイドバーのオフセットであるコンテナーがある場合に発生します。

$(YourTableName+'_wrapper').addClass('mycontainer');

(パネルpanel-defaultを追加しました)
そしてあなたのクラス:

.mycontainer{background-color:white;padding:5px;}

この問題に関する別の便利なリンクを見つけて、問題を解決しました。

<table width="100%">
<tr>
    <td width="20%"> Left TD <td>
    <td width="80%"> Datatable </td>
</tr>
</table>

データテーブルの強制幅テーブル

divをテーブルにラップすると、同様の問題が発生しました。

位置の追加:相対的な固定された。


#report_container {
 float: right;
 position: relative;
 width: 100%;
}

テーブルの内容がテーブルのヘッダーとフッターよりも大きいという同様の問題がありました。テーブルの周りにdivを追加し、x-overflowを設定すると、この問題がソートされたようです:

        

bAutoWidthおよび&amp;の前に、他のすべてのパラメーターを確認してください。 aoColumnsは正しく入力されます。前に間違ったパラメーターを入力すると、この機能が壊れます。

iにも同様の問題があり、列内のテキストが破損しないことがわかり、このCSSコードを使用して問題を解決しました

th,td{
max-width:120px !important;
word-wrap: break-word
}

これが私のやり方です。

$('#table_1').DataTable({
    processing: true,
    serverSide: true,
    ajax: 'customer/data',
    columns: [
        { data: 'id', name: 'id' , width: '50px', class: 'text-right' },
        { data: 'name', name: 'name' width: '50px', class: 'text-right' }
    ]
});

今日、同じ問題に出会いました。

私はそれを解決するためにトリッキーな方法を使用しました。

以下のマイコード。

$('#tabs').tabs({
    activate: function (event, ui) {
       //redraw the table when the tab is clicked
       $('#tbl-Name').DataTable().draw();
    }
});

これは正常に動作します。

#report_container {
   float: right;
   position: relative;
   width: 100%;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top