Làm cách nào để ẩn các cột trong bảng HTML?


93

Tôi đã tạo một bảng trong ASPX. Tôi muốn ẩn một trong các cột dựa trên yêu cầu nhưng không có thuộc tính như visibletrong xây dựng bảng HTML. Làm thế nào tôi có thể giải quyết vấn đề của tôi?

Câu trả lời:


171

Bạn cần sử dụng Style Sheet cho mục đích này.

<td style="display:none;">

1
còn coloumn đầu tiên sử dụng css của html thì sao
office 302

làm thế nào tôi nên thêm kiểu vào nó khi tôi đang tạo bảng bằng javascript createelement (td);
văn phòng 302

1
@ office302 Chỉ áp dụng kiểu này cho td đầu tiên? Hoặc bạn chỉ muốn sử dụng CSS - Điều này bạn có thể làm như thế nàytd:first-child { display:none; }
Anuraj 09/09

@Anuraj cần lưu ý rằng: first-child vv được hỗ trợ> IE 11 và Edge, một tốt anyway
Vitaliy Terziev

88

Bạn có thể sử dụng công nth-childcụ chọn CSS để ẩn toàn bộ cột:

#myTable tr > *:nth-child(2) {
    display: none;
}

Này hoạt động dưới giả định rằng một tế bào của cột N (có thể là một thhoặctd ) luôn là phần tử con thứ N của hàng của nó.

Đây là một bản demo.


Nếu bạn muốn số cột là động, bạn có thể làm điều đó bằng cách sử dụng querySelectorAllhoặc bất kỳ khuôn khổ nào trình bày chức năng tương tự, như jQuerysau:

$('#myTable tr > *:nth-child(2)').hide();

Demo với jQuery

(Giải pháp jQuery cũng hoạt động trên các trình duyệt cũ không hỗ trợnth-child ).


1
Điều này có thể có tác dụng phụ gây hại, hãy xem câu trả lời của tôi bên dưới để có giải pháp cải thiện.
Rick Smith,

@RickSmith Điểm tốt. Đã cập nhật bài đăng của tôi để tránh sự cố theo cách khác (sử dụng bộ chọn con).
Kos,

bộ chọn con chắc chắn tốt hơn. Câu trả lời tốt.
Rick Smith,

Giải pháp tốt nhưng cần xem xét thêm một chút về trường hợp colspan.
Cinoss

30

bạn cũng có thể dùng:

<td style="visibility:hidden;">
or
<td style="visibility:collapse;">

Sự khác biệt giữa chúng mà "hidden" sẽ ẩn ô nhưng nó giữ không gian nhưng với "thu gọn" thì không gian không được giữ như display: none. Điều này rất quan trọng khi ẩn toàn bộ cột hoặc hàng.


1
Tôi thấy rằng đối với các thẻ div, việc thu gọn cũng sẽ giữ khoảng trống. Đối với các thẻ div, bạn sẽ phải sử dụng display: none; để thực sự thu gọn và không giữ được không gian.
Dov Miller

5
visibility: collapseđược thiết kế đặc biệt để xử lý việc hiển thị / ẩn ô, vì có sự khác biệt khi tính toán lại chiều rộng / chiều cao của ô giữa giá trị này và display:none. Xem developer.mozilla.org/en-US/docs/Web/CSS/visibility#Values
SteveB

28

Câu trả lời của Kos gần như đúng, nhưng có thể có tác dụng phụ gây hại. Điều này đúng hơn:

#myTable tr td:nth-child(1), #myTable th:nth-child(1) {
    display: none;
}

CSS (Cascading Style Sheets) sẽ thác các thuộc tính cho tất cả các con của nó. Điều này có nghĩa là *:nth-child(1)sẽ ẩn phần tử đầu tiên tdcủa mỗi tr AND ẩn phần tử đầu tiên của tất cả các phần tử tdcon. Nếu bất kỳ thứ nào của bạn tdcó những thứ như nút, biểu tượng, đầu vào hoặc lựa chọn, cái đầu tiên sẽ bị ẩn (rất tiếc!).

Thậm chí nếu bạn không hiện có những thứ đó sẽ được ẩn, hình ảnh thất vọng của bạn xuống đường nếu bạn cần phải thêm một. Đừng trừng phạt bản thân tương lai của bạn như vậy, đó sẽ là một nỗi đau để gỡ rối!

Câu trả lời của tôi sẽ chỉ ẩn đầu tiên tdthtrên tất cả trtrong #myTableviệc giữ an toàn cho các yếu tố khác của bạn.



6

Bạn cũng có thể ẩn một cột bằng cách sử dụng phần tử col https://developer.mozilla.org/en/docs/Web/HTML/Element/col

Để ẩn cột thứ hai trong bảng:

<table>
  <col />
  <col style="visibility:collapse"/>
  <tr><td>visible</td><td>hidden</td></tr>
  <tr><td>visible</td><td>hidden</td></tr>

Các sự cố đã biết: tính năng này sẽ không hoạt động trong Google Chrome. Vui lòng bỏ phiếu cho lỗi tại https://bugs.chromium.org/p/chromium/issues/detail?id=174167


2

<style>
.hideFullColumn tr > .hidecol
{
    display:none;
}
</style>

sử dụng .hideFullColumn trong bảng và .hidecol trong th.Bạn không cần thêm lớp trong td riêng lẻ vì nó sẽ là vấn đề vì chỉ mục có thể không được ghi nhớ của mỗi td.


1

Bạn cũng có thể làm những gì so với dev đề xuất theo lập trình bằng cách gán kiểu với Javascript bằng cách lặp qua các cột và đặt phần tử td tại một chỉ mục cụ thể để có kiểu đó.


0
<!doctype html>
<html lang="en">
<head>
<style id="myStyleSheet">
...
</style>

var column = 3;
var styleSheet = document.getElementById("myStyleSheet").sheet;
var rule = "table  tr td:nth-child("+ column +"),table th:nth-child("+ column +") 
{display: none}";
styleSheet.insertRule(rule);

2
Hy vọng nó sẽ giải quyết được vấn đề nhưng hãy thêm giải thích về mã của bạn với nó để người dùng sẽ hiểu được hoàn hảo mà họ thực sự muốn.
Jaimil Patel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.