jQuery DataTables : 제어 테이블 너비


98

jQuery DataTables 플러그인을 사용하여 테이블의 너비를 제어하는 ​​데 문제가 있습니다. 테이블은 컨테이너 너비의 100 %로 간주되지만 결국 컨테이너 너비가 아닌 임의의 너비가됩니다.

감사합니다.

테이블 선언은 다음과 같습니다.

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

그리고 자바 스크립트

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

Firebug에서 HTML을 검사하면 다음이 표시됩니다 (추가 된 style = "width : 0px;").

<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%;  
}  

참고로 IE8에서 열이 올바르게 조정되지 않는 문제가 발생했습니다. 범인은 max-width속성이 설정된 이미지였습니다 . 분명히 IE8은 그 속성을 너무 좋아하지 않고 데이터 테이블과 관련하여 무시했습니다. 비록 이미지의 크기가 화면에서 정확하게 맞았음에도 불구하고. width문제를 해결 하도록 변경했습니다 .
John Bubriski

답변:


61

이 문제는 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 ] }
        ]
    } );
} );

자세한 정보는 이것을 참조하십시오 .


1
나는 또한 @John McC와 동일한 문제가 있지만, 나는 내 데이터 테이블을 모달에 적용했고, 나는 부트 스트랩을 사용하고 있으며이 문제에 갇혔습니다. 탭 대신 부트 스트랩 모달을 사용하여 구현하는 방법을 알고 있습니까?. .i 정말 당신의 도움이 필요합니다
cfz

나는 사용하는 것이 좋습니다 window.resize, 예를 보십시오 legacy.datatables.net/ref#fnAdjustColumnSizing
KingRider

"aoColumnDefs": [{ "sWidth": "10 %", "aTargets": [-1]}]. 나는 내 문제를 수정하고 이것을 추가합니다. 감사합니다.
미나 첸

55

당신은 당신이 dataTables을 초기화 할 때 두 개의 변수를 조정할 할 것이다 : bAutoWidthaoColumns.sWidth

너비가 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에 주석을 추가하여 얼마나 가까이 있는지 확인할 수 있습니다.


음. 당신이 말하는 것은 이것이 bAutoWidth : true가 열 너비에 대해 특별히 지능적인 선택을하지 않은 결과라는 것입니다.
John Mac

이것이 제 생각입니다. 데이터 길이가 일치하지 않으면 내 테이블이 바운스됩니다. 이것이 제가 aoColumns 및 bAutoWidth 매개 변수를 입력 한 이유입니다.
artlung

1
아름다운. 내 문제를 완전히 해결했습니다.
Laguna

굉장 @Laguna! 이와 같은 오래된 답변이 계속 도움이된다는 것을 듣는 것을 좋아합니다.
artlung

1
"bAutoWidth": false가 작동합니다. 하지만 질문입니다. 내 <th> 태그에 너비 세부 정보를 입력하는 것이 좋은 습관입니까?
finnTheHumin

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

2
이것은 저에게 맞는 대답이었습니다. 나는 boostrap .table-responsive를 사용하고 있습니다. 데이터 테이블 코드 설정으로 자체 너비를 설정하면 방해가됩니다.
mac10688

탭 변경 이벤트에서 너비 속성을 제거하는 것과 관련된이 어리석은 문제에 대한 내 솔루션을 게시하기 위해 여기에 왔지만 이것이 해결 된 것 같습니다. 감사. +1
Topher

처음 두 탭에 3 개의 탭과 데이터 테이블이 있고 두 번째 탭의 테이블은 전체 너비가 아닙니다. 이것은 내 문제를 해결했습니다. 감사합니다
마이크 볼 마르

47

글쎄, 나는 그 플러그인에 익숙하지 않지만 데이터 테이블을 추가 한 후 스타일을 재설정 할 수 있습니까? 같은 것

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

.dataTable 호출 후?


1
필자의 경우에는 열이 보이지 않을 때 테이블도 100px 너비로 설정 되었기 때문에 이것이 최상의 솔루션이라는 것을 알았습니다. 여기를 참조하십시오 : datatables.net/forums/discussion/3417/…
mydoghasworms

이것은 나를 위해 일한 솔루션입니다. oTable.fnAdjustColumnSizing ()에 비해 데이터 테이블의 CSS를 더 세밀하게 제어 할 수 있습니다. 앞서 언급 한 솔루션입니다.
Vijay Rumao

11

데이터 테이블의 열 너비에 많은 문제가 있습니다. 나를위한 마법의 해결책은

table-layout: fixed;

이 CSS는 테이블의 전체 CSS와 함께 사용됩니다. 예를 들어 다음과 같이 데이터 테이블을 선언 한 경우 :

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

그런 다음 매직 CSS 라인은 Loadtable 클래스로 이동합니다.

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

}


2
이것은 도움이되지만 이제 내 열은 모두 이상한 크기입니다. 나는 가장 많은 데이터가있는 열이 가장 큰 백분율 너비를 취할 것이라고 예상했을 것입니다.
cjbarth

7

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%");
        }

    });

6

이 CSS 클래스를 페이지에 추가하면 문제가 해결됩니다.

#<your_table_id> {
    width: inherit !important;
}

1
지난 30 분 동안 싸우고있는 별도의 문제가있었습니다.이 코드 줄이 문제를 해결했습니다. 그래서이 임의의 주석에 감사를 표하고 싶었습니다.
user1274820

1
이것은 내가 추가 답변을 줄 이유를 정확히
Bahadir Tasdemir

5

sWidth각 열에 대해 명시 적으로 너비를 설정 bAutoWidth: false하고 dataTable초기화 에서 내 (비슷한) 문제를 해결했습니다. 넘쳐나는 스택을 좋아하십시오.


5

고정 필드없이 하나 이상의 필드를 남겨야합니다. 예를 들면 다음과 같습니다.

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

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

모두 변경할 수 있지만 하나만 null로 남겨두면 늘어날 수 있습니다. ALL에 너비를 넣으면 작동하지 않습니다. 오늘 누군가를 도왔기를 바랍니다!


1
그게 나를 위해 모든 열을 1px로 설정했습니다. 하나를 남겨두면 마술처럼 작동했습니다. 감사!
demoncodemonkey

4
"fnInitComplete": function() {
    $("#datatables4_wrapper").css("width","60%");
 }

이것은 전체 테이블 너비를 조정하는 데 잘 작동했습니다. 감사합니다 @ Peter Drinnan!


부모 컨테이너를 제대로 채울 테이블을 가져올 수 없습니다. 테이블의 CSS와 그 래퍼를 width : 100 %로 조정하려고했습니다. 눈에 띄는 차이가 없습니다. 위에서 언급 한 방법을 시도하면 놀라운 일 이었지만 래퍼를 가리 키지 않고 대신 테이블을 가리켜 야했습니다. 하지만 큰 감사 Nilani !!
Logic1 2015


3

여기에 나온 해결책 중 어느 것도 나를 위해 일하지 않았습니다. datatables 홈페이지 의 예제조차도 show 옵션의 datatable 초기화에 작동하지 않았습니다.

문제에 대한 해결책을 찾았습니다. 트릭은 탭에 활성화 옵션사용 하고 보이는 테이블에서 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);

});

2

Ajax가없는 일반 테이블에 JQuery를 적용했지만 당신과 똑같은 문제가 있었다고 말하면됩니다. 어떤 이유로 Firefox는 표를 공개 한 후에도 표를 확장하지 않습니다. 테이블을 DIV 안에 넣고 대신 DIV에 효과를 적용하여 문제를 해결했습니다.


2

준비된 이벤트에서 이것을하고 있습니까?

$ (문서) .ready (function () {...});

크기는 완전히로드되는 문서에 따라 달라집니다.


위의 코드를 살펴보십시오. div 컨테이너 # tab-datasets의 ajax로드에서 콜백에서 발생합니다. 테이블 #querytableDatasets는 / cgi-bin / qryDatasets에서 제공합니다
John Mac

나는 그 일이 일어나는시기를 잘 모르겠다는 것을 이해합니다. 플러그인 소스를 살펴보면 0px 너비를 설정할 수있는 유일한 시간은 올바른 테이블 offSetWidth를 결정할 수없는 것처럼 보였고 너무 일찍 실행하는 것과 관련이 있다고 생각했습니다.
Mufaka

흠. #querytableDatasets 테이블이로드 된 후 ajax로드의 콜백이 호출된다고 가정했습니다. 이것이 사실이 아닐 수도 있다고 생각하십니까?
John Mac

BTW,이 버튼을 클릭하면 사용자에 대한 응답이 실행 때에 대한 귀하의 질문에 대답
존 맥

그럼 더 추가 할 수 있을지 모르겠네요. 버튼 클릭이면 문서가 완전히로드 된 것이며이를 ready 이벤트에 넣을 이유가 없습니다. 테이블 컨테이너의 너비를 가지고 놀거나 현재 레이아웃 외부에서 작동하도록 (DataTables 플러그인)을 시도 할 수 있습니다.
Mufaka

1

고정 헤더 플러그인을 사용하여 테이블 / 셀 너비를 조정하는 데 문제가있는 사람 :

Datatables는 열 너비 매개 변수에 대해 thead 태그를 사용합니다. 이는 대부분의 테이블 내부 html이 자동 생성되기 때문에 실제로 유일한 기본 html이기 때문입니다.

그러나 어떤 일이 발생하면 일부 셀이 thead 셀 내부에 저장된 너비보다 클 수 있습니다.

즉, 테이블에 많은 열 (넓은 테이블)이 있고 행에 많은 데이터가있는 경우 "sWidth"를 호출합니다. 하위 행이 오버플로에 따라 td의 크기를 자동으로 조정하므로 td 셀 크기를 변경하는 것은 제대로 작동하지 않습니다. 이는 테이블이 초기화되고 init 매개 변수를 전달한 후에 발생합니다 .

원래 thead "sWidth": 데이터 테이블이 테이블의 기본 너비가 % 100이라고 생각하기 때문에 매개 변수가 재정의 (축소)됩니다. 일부 셀이 오버플로 된 것을 인식하지 못합니다.

이 문제를 해결하기 위해 오버플로 너비를 파악 하고 테이블이 초기화 된 그에 따라 테이블 크기를 조정하여이를 설명했습니다 . 이때 고정 헤더를 동시에 초기화 할 수 있습니다.

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

1

ajax 호출의 "성공"내에 고정 헤더를 만들면 헤더와 행에 정렬 문제가 없습니다.

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

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

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

1

이것이 여전히 어려움을 겪고있는 사람에게 도움이되기를 바랍니다.

테이블을 용기 안에 보관하지 마십시오. 테이블이 렌더링 된 후 테이블의 래퍼를 컨테이너로 만듭니다. 테이블과 함께 다른 것이있는 곳에서는 이것이 유효하지 않을 수 있지만 언제든지 해당 내용을 다시 추가 할 수 있다는 것을 알고 있습니다.

나를 위해,이 문제는 사이드 바와 실제로 그 사이드 바에 대한 오프셋 인 컨테이너가있는 경우 발생합니다.

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

(패널 패널 기본값을 추가했습니다)
그리고 귀하의 클래스 :

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


0

테이블 주위에 div를 감쌀 때 비슷한 문제가 발생했습니다.

위치 추가 : 상대가 나를 위해 수정했습니다.


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

0

표의 내용이 표 머리글과 바닥 글보다 큰 비슷한 문제가 발생했습니다. 테이블 주위에 div를 추가하고 x-overflow를 설정하면이 문제가 정렬 된 것 같습니다.


0

bAutoWidth 및 aoColumns 앞의 다른 모든 매개 변수가 올바르게 입력되었는지 확인하십시오. 이전에 잘못된 매개 변수가 있으면이 기능이 중단됩니다.


0

나는 비슷한 문제가 있었고 열의 텍스트가 깨지지 않고이 CSS 코드를 사용하여 문제가 해결되었음을 알았습니다.

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

0

제 방식입니다 ..

$('#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' }
    ]
});

0

나는 오늘도 같은 문제를 만난다.

나는 그것을 해결하기 위해 까다로운 방법을 사용했습니다.

내 코드는 아래와 같습니다.

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

0

이 솔루션도 확인하십시오. 이것은 내 DataTable 열 너비 문제를 쉽게 해결했습니다.

JQuery DataTables 1.10.20은 columns.adjust()Bootstrap 토글 탭 문제를 수정하는 방법을 소개합니다.

 $('a[data-toggle="tab"]').on( 'shown.bs.tab', function (e) {
    $.fn.dataTable.tables( {visible: true, api: true} ).columns.adjust();
} );

문서를 참조하십시오 : 스크롤링 및 부트 스트랩 탭


-1

이것은 잘 작동합니다.

#report_container {
   float: right;
   position: relative;
   width: 100%;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.