HTML 테이블에서 열 숨기기 / 표시


146

여러 열이있는 HTML 테이블이 있으며 jquery를 사용하여 열 선택기를 구현해야합니다. 사용자가 확인란을 클릭하면 테이블에서 해당 열을 숨기거나 표시하려고합니다. 테이블의 모든 td에 클래스를 첨부하지 않고이 작업을 수행하고 싶습니다 .jquery를 사용하여 전체 열을 선택하는 방법이 있습니까? 아래는 HTML의 예입니다.

<table>
    <thead>
        <tr><th class="col1">Header 1</th><th class="col2">Header 2</th><th class="col3">Header 3</th></tr>
    </thead>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
</table>

<form>
    <input type="checkbox" name="col1" checked="checked" /> Hide/Show Column 1 <br />
    <input type="checkbox" name="col2" checked="checked" /> Hide/Show Column 2 <br />
    <input type="checkbox" name="col3" checked="checked" /> Hide/Show Column 3 <br />
</form>

2
: 나는 folowing 사이트가 도움이 될 희망 fiendish.demon.co.uk/html/javascript/hidetablecols.html

jQuery를 사용 하여이 솔루션을 구현했으며 완벽하게 작동했습니다. http://www.devcurry.com/2009/07/hide-table-column-with-single-line-of.html
Aaron

1
user344059의 코멘트 당, 여기에 깨진 링크에 대한 웹 아카이브의 http://www.fiendish.demon.co.uk/html/javascript/hidetablecols.html
KyleMit

답변:


84

모든 td에 클래스를 첨부하지 않고이 작업을 수행하고 싶습니다.

개인적으로 class-on-each-td / th / col 접근 방식을 사용합니다. 그런 다음 다음과 같은 스타일 규칙을 가정하여 컨테이너에서 className에 대한 단일 쓰기를 사용하여 열을 켜거나 끌 수 있습니다.

table.hide1 .col1 { display: none; }
table.hide2 .col2 { display: none; }
...

이것은 JS 루프 접근 방식보다 빠를 것입니다. 실제로 긴 테이블의 경우 응답성에 큰 차이를 만들 수 있습니다.

IE6를 지원하지 않는 상태에서 벗어날 수 있다면 인접 선택기를 사용하여 클래스 속성을 td에 추가하지 않아도됩니다. 또는 우려가 마크 업을 더 깨끗하게 만드는 경우 초기화 단계에서 JavaScript에서 자동으로 마크 업을 추가 할 수 있습니다.


7
조언 덕분에 HTML을 더 깨끗하게 유지하고 싶었지만 테이블 크기가 100 행에 도달함에 따라 성능이 분명히 문제가되었습니다. 이 솔루션은 2-5 배의 성능 향상을 제공했습니다.
Brian Fisher

2
이 접근 방식은 성능 측면에서 놀라운 일이었습니다. 감사!
axelarge

4
나는 이것을 CSS에 추가 .hidden {display:none;}하고 사용 .addClass('hidden')했고 .removeClass('hidden')어느 것이 .hide()and 보다 약간 빠르다 .show().
styfle

247

두 번째 열을 숨기는 jQuery를 사용하는 한 줄의 코드 :

$('td:nth-child(2)').hide();

테이블에 header (th)가 있으면 다음을 사용하십시오.

$('td:nth-child(2),th:nth-child(2)').hide();

출처 : 한 줄의 jQuery 코드로 테이블 열 숨기기

코드를 테스트 할 jsFiddle : http://jsfiddle.net/mgMem/1/


좋은 사용 사례를 보려면 내 블로그 게시물을 살펴보십시오.

jQuery를 사용하여 테이블 열을 숨기고 값을 기반으로 행을 채색하십시오 .


1
예제에없는 것처럼 따로, 이것이 colspans를 무시하는 문제가 있습니까? 그래도 사용하지 않으면 좋습니다. 또 다른 질문이 있습니다 : stackoverflow.com/questions/1166452/…
Kim R

2
페이저로 바닥 글을 숨기지 않기 위해 선택기에 tbody를 추가해야했습니다. $ ( '. webgrid tbody td : nth-child (1), .webgrid th : nth-child (1)'). hide ();
Alex

@KimR 이것은 colspan 문제에 도움이 될 수 있습니다 stackoverflow.com/questions/9623601/…
yunzen September

나는 왜 그런지 정확히 알지 못하지만 대신 'nth-of-type'을 사용해야했습니다. 예를 들면 다음과 같습니다. $ ( 'table td : nth-of-type (2)'). hide ();
Leopoldo Sanczyk

@LeopoldoSanczyk 사파리를 사용하고 있었습니까? 이 n 번째의 형이 필요 것 같다
ykay는 분석 재개 모니카 말한다

12

colgroup을 사용할 수 있습니다.

<table>
    <colgroup>
       <col class="visible_class"/>
       <col class="visible_class"/>
       <col class="invisible_class"/>  
    </colgroup>
    <thead>
        <tr><th class="col1">Header 1</th><th class="col2">Header 2</th><th class="col3">Header 3</th></tr>
    </thead>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
</table>

그러면 스크립트가 원하는 <col>클래스 만 변경할 수 있습니다 .


교차 브라우저를 지원하지 않는 colgroup이 더 이상 사실이 아님을 기억하는 것 같습니다.
Brian Fisher

아마도. 나는이 방법을 hilight 열에 사용하고 있습니다 (firefox, safari, chrome은 잘 작동합니다)는 IE에서 시도하지 않았습니다.
Luis Melgratti

@Brian-IE8이 작동하지 않고 IE7을 사용하는 IE8이 작동하는 것 같습니다.
Nordes

4
최신 브라우저 (Chrome 및 Firefox)에서 더 이상 작동하지 않는 것 같습니다.
JBE

@JBE가 : 정확히 말하면, 이것은 않습니다 현대적인 브라우저에서 작업을 어느 정도 . $('table > colgroup > col.yourClassHere')jQuery 선택기를 사용 하면 여전히 전체 열의 배경색과 같이 smth를 설정할 수 있지만 더 이상 열 가시성을 전환 할 수 없습니다. 테스트 된 브라우저는 MSIE 11 , Safari 5 , Chromium 44 , Opera 12 , Mozilla SeaMonkey 2.40 , Mozilla Firefox 43 입니다. "HTML 4.01의 대부분의 속성은 HTML5에서 지원되지 않습니다"– 여기를 참조 하십시오 .
Bass

11

다음과 같이해야합니다.

$("input[type='checkbox']").click(function() {
    var index = $(this).attr('name').substr(2);
    $('table tr').each(function() { 
        $('td:eq(' + index + ')',this).toggle();
    });
});

이것은 테스트되지 않은 코드이지만 원칙적으로 확인란 이름에서 추출 된 선택한 인덱스에 해당하는 각 행에서 테이블 셀을 선택하는 것입니다. 물론 클래스 나 ID로 선택자를 제한 할 수 있습니다.


11

다음은 열별로 사용자 상호 작용을 제공하는 좀 더 완전한 기능을 갖춘 답변입니다. 이것이 역동적 인 경험이 되려면 각 열에 클릭 가능한 토글이 있어야 열을 숨기는 기능을 표시 한 다음 이전에 숨겨진 열을 복원 할 수 있습니다.

JavaScript에서 다음과 같이 보일 것입니다.

$('.hide-column').click(function(e){
  var $btn = $(this);
  var $cell = $btn.closest('th,td')
  var $table = $btn.closest('table')

  // get cell location - https://stackoverflow.com/a/4999018/1366033
  var cellIndex = $cell[0].cellIndex + 1;

  $table.find(".show-column-footer").show()
  $table.find("tbody tr, thead tr")
        .children(":nth-child("+cellIndex+")")
        .hide()
})

$(".show-column-footer").click(function(e) {
    var $table = $(this).closest('table')
    $table.find(".show-column-footer").hide()
    $table.find("th, td").show()

})

이를 지원하기 위해 테이블에 마크 업을 추가합니다. 각 열 머리글에 이와 같은 것을 추가하여 클릭 가능한 것을 시각적으로 표시 할 수 있습니다

<button class="pull-right btn btn-default btn-condensed hide-column" 
            data-toggle="tooltip" data-placement="bottom" title="Hide Column">
    <i class="fa fa-eye-slash"></i>  
</button>

사용자는 테이블 바닥 글의 링크를 통해 열을 복원 할 수 있습니다. 기본적으로 영구적이지 않으면 헤더에서 동적으로 전환하면 테이블 주위를 뒤흔들 수 있지만 원하는 위치에 실제로 배치 할 수 있습니다.

<tfoot class="show-column-footer">
   <tr>
    <th colspan="4"><a class="show-column" href="#">Some columns hidden - click to show all</a></th>
  </tr>
</tfoot>

이것이 기본 기능입니다. 다음은 몇 가지 더 많은 것들을 보여주는 데모입니다. 또한 버튼에 툴팁을 추가하여 목적을 명확하게하고 버튼을 좀 더 유기적으로 표 머리글에 스타일을 지정하고 열 너비를 축소하여 약간의 CSS 애니메이션을 추가하여 전환을 조금 줄입니다. 깜짝 놀란.

데모 스크린 그랩

jsFiddle 및 스택 스 니펫의 실무 데모 :


가장 가까운 1 열을 숨기고 가장 가까운 3 열을 숨기는 방법은 무엇입니까?
Nirmal Goswami 2016 년

- 내 테이블 확인 i.stack.imgur.com/AA8iZ.png 테이블 HTML을 포함하고 질문을 - stackoverflow.com/questions/50838119/... 버튼 A, B 및 C 후에 올 것이다
NIRMAL Goswami

이러한 오래된 대답을 되살려 서 죄송하지만 기본적으로 특정 열을 숨기도록 설정하는 쉬운 방법이 있습니까? 나는 그렇게하려고 $(document).ready하지만 운이 없다
RobotJohnny

1
@RobotJohnny, 좋은 질문입니다. 이 클래스를 사용하는 .hide-col열을 제거 할 수 있지만, 당신도 할 수 있도록 또한뿐만 아니라 상태를 나타내는 데 사용할 수 있습니다 - 추가 .hide-coltdtrHTML을 렌더링 할 때와 수행 할 수. 또는 더 적은 수의 장소에 추가하려면 헤더에 넣고 (상태는 어딘가에 가야 함) 초기화하면 해당 열 인덱스를 자식 전체에 숨길 수 있습니다. 현재 코드는 클릭시 위치를 듣고 있지만 클래스 위치를 찾기 위해 수정할 수도 있습니다. 또한 행복한 칠면조의 날
KyleMit

1
@RobotJohnny, 초기화 처리도 포함하도록 코드 샘플을 업데이트했습니다. class='hide-col'당신이 당신의 html에서 당신이 원하는 어느 곳에든지 놓으 십시오. (아마도 thead > tr > th가장 의미가 있고 아마도 그 열의 모든 셀을 숨기고 복원 바닥 글을 동적으로 보여주기 위해 선택 될 것입니다)
KyleMit

4

물론 CSS nth-child 다음 을 지원 하는 브라우저 에만 적용됩니다 .

table td:nth-child(2) { display: none; }

이것은 IE9 이상입니다.

유스 케이스의 경우 열을 숨기려면 여러 클래스가 필요합니다.

.hideCol1 td:nth-child(1) { display: none;}
.hideCol2 td:nth-child(2) { display: none;}

요법 ...


2

다음은 Eran의 코드를 기반으로 약간의 변경 사항이 있습니다. 그것을 테스트했으며 Firefox 3, IE7에서 제대로 작동하는 것 같습니다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
                "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<script>
$(document).ready(function() {
    $('input[type="checkbox"]').click(function() {
        var index = $(this).attr('name').substr(3);
        index--;
        $('table tr').each(function() { 
            $('td:eq(' + index + ')',this).toggle();
        });
        $('th.' + $(this).attr('name')).toggle();
    });
});
</script>
<body>
<table>
<thead>
    <tr>
        <th class="col1">Header 1</th>
        <th class="col2">Header 2</th>
        <th class="col3">Header 3</th>
    </tr>
</thead>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
</table>

<form>
    <input type="checkbox" name="col1" checked="checked" /> Hide/Show Column 1 <br />
    <input type="checkbox" name="col2" checked="checked" /> Hide/Show Column 2 <br />
    <input type="checkbox" name="col3" checked="checked" /> Hide/Show Column 3 <br />
</form>
</body>
</html>

1
<p><input type="checkbox" name="ch1" checked="checked" /> First Name</p>
.... 
<td class="ch1">...</td>

 <script>
       $(document).ready(function() {
            $('#demo').multiselect();
        });


        $("input:checkbox:not(:checked)").each(function() {
    var column = "table ." + $(this).attr("name");
    $(column).hide();
});

$("input:checkbox").click(function(){
    var column = "table ." + $(this).attr("name");
    $(column).toggle();
});
 </script>

0

수업이 없습니까? 그런 다음 태그를 사용할 수 있습니다.

var tds = document.getElementsByTagName('TD'),i;
for (i in tds) {
  tds[i].style.display = 'none';
}

그리고 그들이 사용하는 것을 보여주기 위해 :

...style.display = 'table-cell';            
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.