Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- github
- DataTable
- CSS
- jquery
- node
- html
- password
- Emulator
- innerText
- Cloud
- ajax
- Frontend
- node.js
- insertAdjacentHTML
- EJS
- Express
- React
- url parsing
- Javasript
- Excel
- QueryString
- vue
- Video
- json
- module
- Front-End
- javascript
- jstree
Archives
- Today
- Total
Developer's blog
[JavaScript] 테이블 expand 구현하기 본문
이번에는 테이블을 클릭하면 테이블이 확장되며 child row를 보여줄 수 있도록하는 기능을 개발하고자 한다.
먼저, table expand를 위한 expand용 화살표를 만들기 위해 테이블의 제일 앞에 화살표를 둘 수 있도록 html을 아래와 같이 구성하였다.
<table class="table table-hover text-center dataTables-example" id="example" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th></th>
<th>문의유형</th>
<th>제목</th>
<th>등록일</th>
<th>진행상태</th>
</tr>
</thead>
<tbody>
<tr>
<td class="contact-control"></td>
<td>회원정보</td>
<td>회원 정보는 어떻게 수정하나요?</td>
<td>2022-07-23</td>
<td>답변대기</td>
</tr>
<tr>
<td class="contact-control"></td>
<td>회원정보</td>
<td>회원 정보는 어떻게 수정하나요?</td>
<td>2022-07-23</td>
<td>답변완료</td>
</tr>
<tr>
<td class="contact-control"></td>
<td>회원정보</td>
<td>회원 정보는 어떻게 수정하나요?</td>
<td>2022-07-23</td>
<td>답변완료</td>
</tr>
<tr>
<td class="contact-control"></td>
<td>회원정보</td>
<td>회원 정보는 어떻게 수정하나요?</td>
<td>2022-07-23</td>
<td>답변완료</td>
</tr>
<tr>
<td class="contact-control"></td>
<td>회원정보</td>
<td>회원 정보는 어떻게 수정하나요?</td>
<td>2022-07-23</td>
<td>답변완료</td>
</tr>
</tbody>
<tfoot>
</tfoot>
</table>
여기서 빈 td에 contact-control이라는 클래스를 부여한 이유는 expand를 구현하기 위한 key로 사용하기 위해 부여하였다.
부여한 클래스를 통해 expand를 작동하는 원리를 가진 자바스크립트는 아래와 같다.
// Add event listener for opening and closing details
$('#example tbody').on('click', 'td.contact-control', function(){
var tr = $(this).closest('tr');
var row = table.row( tr );
if(row.child.isShown()){
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
} else {
// Open this row
row.child(format(row.data())).show();
tr.addClass('shown');
}
});
해당 스크립트를 통해 child row를 펼칠 수 있게하였고, 이때 사용하는 child row의 format은 아래와 같이 따로 선언해주었다.
<script>
function format ( d ) {
return '<div class="row ml-1">'+
'<div class="col-lg-12 mt-3">'+
'<p class="question float-left"><span class="contact-icon mr-1">Q.</span>회원정보는 어떻게 수정하나요? </p>'+
'</div>'+
'<div class="col-lg-12 mb-2">'+
'<p class="anwser float-left"><span class="contact-icon mr-1">A.</span>왼쪽 사이드메뉴의 프로필에서 원하는 정보를 찾아 변경하시면 됩니다. </p>'+
'</div>';
}
</script>
여기까지 단계에 도달했다면 이제 왼쪽의 화살표를 만들어주고 마우스를 가져다놓을때 커서를 포인터로 변경해주는 css를 아래와 같이 따로 작성해주었다.
td.contact-control {
background: url('../images/right.svg') no-repeat center center;
cursor: pointer;
}
tr.shown td.contact-control {
background: url('../images/down.svg') no-repeat center center;
}
위와 같은 방법을 통해 화살표 클릭 시, table expand 되고 닫을 수 있는 기능을 개발해보았다.
Tip. 제목을 누를 때 expand하고 싶다면 제목에 contact-control 클래스를 전체 중 아무거나 누를 때 가능하게 하고싶다면 모든 td에 contact-control 이라는 클래스를 부여하면 될 것이다.
마지막으로 만들어진 결과물 이미지를 첨부하고 이 글을 마치도록 하겠다.
'FrontEnd > JavaScript' 카테고리의 다른 글
[JavaScript] 비밀번호 보이기 / 숨기기 구현 (0) | 2022.06.15 |
---|---|
[JavaScript] 이미지 클릭 시 다음 페이지에 해당 이미지 띄우기 (0) | 2022.04.28 |
[JavaScript] Html5 - Video 태그를 이용한 동영상 스트리밍 기능 구현 (0) | 2022.04.13 |
[JavaScript] jsTree 사용법 예제 모음 (0) | 2021.07.02 |
[JavaScript] 클릭 시, 새 창으로 결과 출력 (0) | 2021.06.29 |