datable jquery - 표 머리글 너비가 본문 너비와 정렬되지 않음
저는 jQuery 데이터 테이블을 사용하고 있습니다.응용프로그램을 실행할 때 헤더 너비가 본문 너비와 정렬되지 않습니다.하지만 제가 헤더를 클릭했을 때, 그것은 몸의 너비에 맞춰지고 있지만, 심지어 약간의 정렬 오류가 있습니다.이 문제는 IE에서만 발생합니다.
페이지가 로드될 때 다음과 같이 표시됩니다.
머리글 클릭 후:
내 데이터 테이블 코드:
$("#rates").dataTable({
"bPaginate": false,
"sScrollY": "250px",
"bAutoWidth": false,
"bScrollCollapse": true,
"bLengthChange": false,
"bFilter": false,
"sDom": '<"top">rt<"bottom"flp><"clear">',
"aoColumns": [{
"bSortable": false
},
null,
null,
null,
null
]
});
rates
내 테이블 아이디야.
이것 좀 도와주실 분 있나요?
원인
jQuery DataTables에서 열 너비를 계산할 수 없도록 테이블이 처음에 숨겨져 있을 가능성이 높습니다.
솔루션
테이블이 접이식 요소에 있는 경우 접이식 요소가 표시될 때 헤더를 조정해야 합니다.
예를 들어 Bootstrap 축소 플러그인의 경우:
$('#myCollapsible').on('shown.bs.collapse', function () { $($.fn.dataTable.tables(true)).DataTable() .columns.adjust(); });
탭에 표가 있는 경우, 탭이 표시될 때 헤더를 조정해야 합니다.
예를 들어 Bootstrap Tab 플러그인의 경우:
$('a[data-toggle="tab"]').on('shown.bs.tab', function(e){ $($.fn.dataTable.tables(true)).DataTable() .columns.adjust(); });
위의 코드는 페이지의 모든 테이블에 대한 열 너비를 조정합니다.자세한 내용은 API 메서드를 참조하십시오.
응답식, 스크롤러 또는 고정 기둥 확장
Response, Scroller 또는 FixedColumns 확장을 사용하는 경우 이 문제를 해결하기 위해 추가 API 방법을 사용해야 합니다.
Response 확장을 사용하는 경우 API 메서드 외에 API 메서드를 호출해야 합니다.응답 확장 – 잘못된 중단점 예제를 참조하십시오.
Scroller 확장을 사용하는 경우 API 메서드 대신 API 메서드를 호출해야 합니다.스크롤러 확장 – 잘못된 열 너비 또는 결측 데이터 예제를 참조하십시오.
FixedColumns 확장을 사용하는 경우 API 메서드 외에 API 메서드도 호출해야 합니다.고정 열 확장 – 잘못된 열 너비 예제를 참조하십시오.
링크
테이블을 처음 숨길 때 jQuery DataTables의 열과 관련된 가장 일반적인 문제에 대한 해결책은 jQuery DataTables – Bootstrap 탭의 열 너비 문제를 참조하십시오.
는 "을 "dataTable"로 포장하여 이 했습니다.div
와 함께overflow:auto
:
.dataTables_scroll
{
overflow:auto;
}
이 를 그를고당이 JS추다 합니다.dataTable
초기화:
jQuery('.dataTable').wrap('<div class="dataTables_scroll" />');
사용하지 sScrollX
또는sScrollY
해당 항목을 제거하고 추가합니다.div
같은 일을 하는 자신을 포장합니다.
솔루션 발견:
된 된가 추가됨table-layout:fixed
.그리고 IE 모드에서 애플리케이션을 열었습니다.
다음 명령을 사용
$('#rates').DataTable({
"scrollX": true,
"sScrollXInner": "100%",
});
내가 고쳤어, 날 위해 일해요.
var table = $('#example').DataTable();
$('#container').css( 'display', 'block' );
table.columns.adjust().draw();
또는
var table = $('#example').DataTable();
table.columns.adjust().draw();
참조: https://datatables.net/reference/api/columns.adjust()
ScrollX 또는 scrollY 매개변수를 사용하여 DataTables에서 스크롤을 활성화하면 전체 테이블이 두 개 또는 세 개의 개별 HTML 테이블 요소(헤더, 본문 및 선택적으로 바닥글)로 분할됩니다.이 작업은 데이터 테이블의 다른 섹션을 브라우저 간 방식으로 스크롤하는 기능을 제공하기 위해 수행됩니다.
저의 경우 콘텐츠가 오른쪽으로 스크롤되기 때문에 가로 스크롤 막대가 필요했습니다.따라서 "scrollX" 매개 변수를 추가하면 더 많은 열이 있는 일부 페이지에서 이 문제가 발생했습니다.
아래 코드에서는 "overflow as auto" 스타일로 div를 데이터 테이블에 감습니다.dataTable 실행이 완료되면 div를 추가해야 합니다.이 작업은 다음과 같이 수행할 수 있습니다.
$('#DataTableID').DataTable({
//"scrollX": true,
"initComplete": function (settings, json) {
$("#DataTableID").wrap("<div style='overflow:auto; width:100%;position:relative;'></div>");
},
});
스크롤 X, 스크롤 Y, 스크롤 Xinner 또는 sScroll Xinner 옵션을 사용하는 경우 제거합니다.그들은 문제를 일으킬 수 있습니다.
출처: http://sforsuresh.in/datatables-header-body-not-aligned
Gyrocode.com 이 말했듯이, "처음에는 테이블이 숨겨져 있기 때문에 jQuery DataTables가 열 너비를 계산할 수 없습니다."
저도 이 문제가 있었는데 div를 보여준 후 dataTable을 입력하여 해결했습니다.
예를들면
$('#my_div').show();
$('#my_table').DataTable();
문제는 데이터 테이블이 DOM에 그려지기 전에 데이터 테이블이 호출된다는 것입니다. 데이터 테이블을 호출하기 전에 시간 초과 설정을 사용하십시오.
setTimeout(function(){
var table = $('#exampleSummary').removeAttr('width').DataTable( {
scrollY: "300px",
scrollX: true,
scrollCollapse: true,
paging: true,
columnDefs: [
{ width: 200, targets: 0 }
],
fixedColumns: false
} );
}, 100);
다양한 목발, 테이블 헤더 폭이 본문과 정렬되지 않은 경우, 테이블에 데이터를 채울 시간이 충분하지 않기 때문에 setTimeout을 수행할 필요가 없습니다.
setTimeout(function() {
//your datatable code
}, 1000);
이 코드는 헤더를 본문과 정렬합니다.data-table-basic
제가 준 데이터 테이블의 id입니다.
<style>
#data-table-basic_wrapper .dataTable, #data-table-basic_wrapper .dataTables_scrollHeadInner {
width: 100% !important;
}
</style>
위의 어떤 해결책도 저에게 효과가 없었지만 결국 효과가 있는 해결책을 찾았습니다.
이 문제의 제 버전은 '박스 크기'를 다른 값으로 설정한 타사 CSS 파일로 인해 발생했습니다.아래 코드로 다른 요소에 영향을 주지 않고 문제를 해결할 수 있었습니다.
$table.closest(".dataTables_wrapper").find("*").css("box-sizing","content-box").css("-moz-box-sizing","content-box");
이것이 누군가에게 도움이 되기를 바랍니다!
테이블 너비가 100%인지 확인합니다.
그러면 "autoWidth":true
많은 시간이 지난 후에, 저는 방금 이사를 갔습니다.options
그리고 그것은 잘 작동합니다.
$("#rates").dataTable({
"bPaginate": false,
"sScrollY": "250px",
"bAutoWidth": false,
"bScrollCollapse": true,
"bLengthChange": false,
"bFilter": false,
"sDom": '<"top">rt<"bottom"flp><"clear">',
"aoColumns": [{
"bSortable": false
},
null,
null,
null,
null
]}).fnAdjustColumnSizing( false );
fnAdjustColumSizing(false)을 위의 수정 코드 데이터 테이블 호출 끝으로 호출해 보십시오.
이 대답에서
var table = $('#example').DataTable();
table.columns.adjust().draw();
로.
setTimeout(function () {
var table = $('#example').DataTable();
table.columns.adjust().draw();
}, 3000);
일하기 위해!!!!
위의 솔루션 중 저에게 적합한 솔루션이 없습니다. 제 솔루션을 게시하겠습니다.저는 테이블을 숨겨진 디브에 로드하고 테이블이 만들어진 후 디브를 보여주고 있었습니다.제가 먼저 디브를 보여/숨겼다가 테이블이 보이는 상태에서 테이블을 만들었을 때 효과가 있었습니다.
따라서 테이블이 숨겨져 있을 때 백엔드에서 0px의 열 너비를 얻기 때문에 숨겨진 div에서 열 크기를 조정할 수 없습니다.
테이블 태그 요소를 오버플로 자동 및 위치 상대적인 div로 간단히 래핑합니다.크롬과 IE8에서 작동할 것입니다.데이터를 다시 로드한 후에도 테이블 크기를 고정하기 위해 높이 400px를 추가했습니다.
table = $('<table cellpadding="0" cellspacing="0" border="0" class="display" id="datat"></table>').appendTo('#candidati').dataTable({
//"sScrollY": "400px",//NO MORE REQUIRED - SEE wrap BELOW
//"sScrollX": "100%",//NO MORE REQUIRED - SEE wrap BELOW
//"bScrollCollapse": true,//NO MORE REQUIRED - SEE wrap BELOW
//"bScrollAutoCss": true,//NO MORE REQUIRED - SEE wrap BELOW
"sAjaxSource": "datass.php",
"aoColumns": colf,
"bJQueryUI": true,
"sPaginationType": "two_button",
"bProcessing": true,
"bJQueryUI":true,
"bPaginate": true,
"table-layout": "fixed",
"fnServerData": function(sSource, aoData, fnCallback, oSettings) {
aoData.push({"name": "filters", "value": $.toJSON(getSearchFilters())});//inserisce i filtri
oSettings.jqXHR = $.ajax({
"dataType": 'JSON',
"type": "POST",
"url": sSource,
"data": aoData,
"success": fnCallback
});
},
"fnRowCallback": function(nRow, aData, iDisplayIndex) {
$(nRow).click(function() {
$(".row_selected").removeClass("row_selected");
$(this).addClass("row_selected");
//mostra il detaglio
showDetail(aData.CandidateID);
});
},
"fnDrawCallback": function(oSettings) {
},
"aaSorting": [[1, 'asc']]
}).wrap("<div style='position:relative;overflow:auto;height:400px;'/>"); //correzione per il disallineamento dello header
사용: 모달 이름을 바꾸고 데이터 테이블을 지우고 로드합니다.
$('#modalCandidateAssessmentDetail').on('shown.bs.modal', function (e) {
});
이것은 간단한 CSS 솔루션입니다.
.dataTables_scroll {
overflow:auto;
display:inline-block
}
부트스트랩 테이블이 먼저 렌더링되면 그리기 이벤트를 사용한 다음 column.adjust():
table.on( 'draw', function () {
table.columns.adjust();
} );
jquery 데이터 테이블이 이미 렌더링된 경우 그리기 이벤트가 실행됩니다.
columns.adjust()
열 크기를 조정합니다.
Mike Ramsey의 답변을 링크한 결과 DOM이 로드되기 전에 테이블이 초기화되고 있다는 것을 알게 되었습니다.
이 문제를 해결하기 위해 다음 위치에 초기화 기능을 배치했습니다.
document.addEventListener('DOMContentLoaded', function() {
InitTables();
}, false);
이 솔루션을 참조하십시오.윈도우 스크롤 이벤트를 한 번만 실행하면 해결할 수 있습니다.
저도 같은 문제에 직면해 있었습니다.데이터 테이블에 스크롤 X: true 속성을 추가했는데 작동했습니다.데이터 테이블에 대한 CSS를 변경할 필요가 없습니다.
jQuery('#myTable').DataTable({
"fixedHeader":true,
"scrollY":"450px",
"scrollX":true,
"paging": false,
"ordering": false,
"info": false,
"searching": false,
"scrollCollapse": true
});
이것이 오래된 것이라는 것을 알지만, 저는 그저 문제에 부딪혔을 뿐 좋은 해결책을 찾지 못했습니다.그래서 테이블 높이와 비교하여 스크롤 바디의 높이를 얻기 위해 몇 가지 js를 사용하기로 결정했습니다.스크롤 본문이 테이블보다 작으면 스크롤 막대를 고려하여 테이블 너비를 15px 늘립니다.컨테이너 크기가 변경될 때 작동하도록 크기 조정 이벤트에도 설정했습니다.
const tableHeight = $('#' + this.options.id).height();
const scrollBodyHeight = $('#' + this.options.id).closest('.dataTables_scrollBody').height();
if (tableHeight > scrollBodyHeight) {
$('#' + this.options.id).closest('.dataTables_scrollBody').css({
width: "calc(100% + 15px)",
})
} else {
$('#' + this.options.id).closest('.dataTables_scrollBody').css({
width: "100%",
})
}
$(.DataTables_sort_wrapper'). 트리거("클릭");
불행하게도, 그 어떤 해결책도 저에게 효과가 없었습니다.아마도 테이블 초기화 차이로 인해 결과가 다를 수 있습니다.그 해결책 중 하나가 누군가에게 효과가 있을 수도 있습니다.어쨌든, 누군가가 이 문제로 여전히 어려움을 겪고 있을 때를 대비해 제 해결책을 공유하고 싶었습니다.조금 촌스럽지만 나중에 테이블 폭을 바꾸지 않기 때문에 저에게는 효과가 있습니다.
정상적으로 되도록 한 후 헤더의 합니다..dataTables_scrollHeadInner
내에는 야. 내 경우에는 그렇습니다.715px
를 들면 를들면예면.그런 다음 해당 너비를 CSS에 추가합니다.
.dataTables_scrollHeadInner
{
width: 715px !important;
}
제 해결책은 다음과 같습니다.
initComplete () {
this.api (). columns (). header (). each ((el, i) => {
$ (el) .attr ('style', 'min-width: 160px;')
});
},
...
그리고 괜찮아 보입니다.
Gyrocode.com 의 문제에 대한 대답은 전적으로 옳았지만 그의 해결책은 모든 경우에 효과가 없을 것입니다.더 일반적인 접근 방식은 다음을 document.ready 함수 외부에 추가하는 것입니다.
$(document).on( 'init.dt', function ( e, settings ) {
var api = new $.fn.dataTable.Api( settings );
window.setTimeout(function () {
api.table().columns.adjust().draw();
},1);
} );
컨테이너 테이블에 대한 고정 너비 추가
JS:
otableCorreo = $("#indexTablaEnvios").DataTable({
"fnInitComplete": function (oSettings, json) {
$(otableCorreo.table().container()).addClass("tablaChildren");
},
});
CSS:
.tablaChildren {
width: 97%;
}
저도 비슷한 문제가 있었습니다.확장/축소 가능한 패널로 테이블을 만듭니다.테이블이 보이는 한 문제 없습니다.그러나 패널을 접고 브라우저의 크기를 조정한 다음 확장하면 문제가 발생했습니다.이 기능이 패널을 확장할 때마다 패널 헤더에 대한 클릭 기능에 다음을 배치하여 수정했습니다.
// recalculate column widths, because they aren't recalculated when the table is hidden'
$('.homeTable').DataTable()
.columns.adjust()
.responsive.recalc();
언급URL : https://stackoverflow.com/questions/17237812/datatable-jquery-table-header-width-not-aligned-with-body-width
'programing' 카테고리의 다른 글
SQL Server Express 내에서 데이터베이스를 복사하시겠습니까? (0) | 2023.08.20 |
---|---|
변수가 정의되지 않았는지 여부 (0) | 2023.08.20 |
Angular 2: 각 루프가 아닌 for 루프를 작성하는 방법 (0) | 2023.08.20 |
숫자를 가장 가까운 10으로 반올림하는 방법은? (0) | 2023.08.20 |
'Match' cmdlet을 사용하여 PowerShell에서 문자열 배열(또는 목록)을 필터링하려면 어떻게 해야 합니까? (0) | 2023.08.20 |