Hiển thị / ẩn 'div' bằng JavaScript


185

Đối với một trang web tôi đang làm, tôi muốn tải một div và ẩn một div khác, sau đó có hai nút sẽ chuyển đổi chế độ xem giữa các div bằng JavaScript.

Đây là mã hiện tại của tôi

function replaceContentInContainer(target, source) {
  document.getElementById(target).innerHTML = document.getElementById(source).innerHTML;
}

function replaceContentInOtherContainer(replace_target, source) {
  document.getElementById(replace_target).innerHTML = document.getElementById(source).innerHTML;
}
<html>
<button onClick="replaceContentInContainer('target', 'replace_target')">View Portfolio</button>
<button onClick="replaceContentInOtherContainer('replace_target', 'target')">View Results</button>

<div>
  <span id="target">div1</span>
</div>

<div style="display:none">
  <span id="replace_target">div2</span>
</div>

Hàm thứ hai thay thế div2 không hoạt động, nhưng hàm thứ nhất là.

Câu trả lời:


424

Cách hiển thị hoặc ẩn một phần tử:

Để hiển thị hoặc ẩn một phần tử, thao tác thuộc tính kiểu của phần tử . Trong hầu hết các trường hợp, bạn có lẽ chỉ muốn thay đổi của phần tử displaybất động sản :

element.style.display = 'none';           // Hide
element.style.display = 'block';          // Show
element.style.display = 'inline';         // Show
element.style.display = 'inline-block';   // Show

Ngoài ra, nếu bạn sẽ vẫn như nguyên tố này để chiếm không gian (như nếu bạn đã che giấu một ô trong bảng), bạn có thể thay đổi của phần tử visibilitybất động sản thay vì:

element.style.visibility = 'hidden';      // Hide
element.style.visibility = 'visible';     // Show

Ẩn một bộ sưu tập các yếu tố:

Nếu bạn muốn ẩn một bộ sưu tập các phần tử, chỉ cần lặp qua từng phần tử và thay đổi phần tử displaythành none:

function hide (elements) {
  elements = elements.length ? elements : [elements];
  for (var index = 0; index < elements.length; index++) {
    elements[index].style.display = 'none';
  }
}
// Usage:
hide(document.querySelectorAll('.target'));
hide(document.querySelector('.target'));
hide(document.getElementById('target'));

Hiển thị một bộ sưu tập các yếu tố:

Hầu hết thời gian, bạn có thể sẽ chỉ chuyển đổi giữa display: nonedisplay: block, điều đó có nghĩa là những điều sau đây có thể là đủ khi hiển thị một bộ sưu tập các yếu tố.

Bạn có thể tùy ý chỉ định mong muốn displaylàm đối số thứ hai nếu bạn không muốn nó mặc định block.

function show (elements, specifiedDisplay) {
  elements = elements.length ? elements : [elements];
  for (var index = 0; index < elements.length; index++) {
    elements[index].style.display = specifiedDisplay || 'block';
  }
}
// Usage:
var elements = document.querySelectorAll('.target');
show(elements);

show(elements, 'inline-block'); // The second param allows you to specify a display value

Ngoài ra, một cách tiếp cận tốt hơn để hiển thị (các) phần tử sẽ chỉ là loại bỏ displaykiểu dáng nội tuyến để hoàn nguyên nó về trạng thái ban đầu. Sau đó kiểm tra displaykiểu tính toán của phần tử để xác định xem nó có bị ẩn theo quy tắc xếp tầng hay không. Nếu vậy, sau đó hiển thị các yếu tố.

function show (elements, specifiedDisplay) {
  var computedDisplay, element, index;

  elements = elements.length ? elements : [elements];
  for (index = 0; index < elements.length; index++) {
    element = elements[index];

    // Remove the element's inline display styling
    element.style.display = '';
    computedDisplay = window.getComputedStyle(element, null).getPropertyValue('display');

    if (computedDisplay === 'none') {
        element.style.display = specifiedDisplay || 'block';
    }
  }
}

(Nếu bạn muốn mang nó một bước xa hơn, bạn có thể thậm chí bắt chước những gì jQuery làm và xác định phong cách trình duyệt mặc định của phần tử bằng cách thêm yếu tố để một trống iframe(không có kiểu mâu thuẫn) và sau đó lấy lại phong cách tính toán. Bằng cách đó, bạn sẽ biết displaygiá trị thuộc tính ban đầu thực sự của phần tử và bạn sẽ không phải mã hóa giá trị để có kết quả mong muốn.)

Bật màn hình:

Tương tự, nếu bạn muốn chuyển đổi displaymột phần tử hoặc tập hợp các phần tử, bạn có thể chỉ cần lặp lại qua từng phần tử và xác định xem nó có thể nhìn thấy hay không bằng cách kiểm tra giá trị tính toán của thuộc displaytính. Nếu đó là có thể nhìn thấy, thiết lập displayđể none, nếu không loại bỏ các inline displayphong cách, và nếu nó vẫn còn ẩn, thiết lập các displaygiá trị cụ thể hoặc mặc định mã hóa cứng, block.

function toggle (elements, specifiedDisplay) {
  var element, index;

  elements = elements.length ? elements : [elements];
  for (index = 0; index < elements.length; index++) {
    element = elements[index];

    if (isElementHidden(element)) {
      element.style.display = '';

      // If the element is still hidden after removing the inline display
      if (isElementHidden(element)) {
        element.style.display = specifiedDisplay || 'block';
      }
    } else {
      element.style.display = 'none';
    }
  }
  function isElementHidden (element) {
    return window.getComputedStyle(element, null).getPropertyValue('display') === 'none';
  }
}
// Usage:
document.getElementById('toggle-button').addEventListener('click', function () {
  toggle(document.querySelectorAll('.target'));
});


96

Bạn cũng có thể sử dụng khung JavaScript jQuery :

Để ẩn Khối Div

$(".divIDClass").hide();

Để hiển thị Khối Div

$(".divIDClass").show();

17
Câu hỏi không đề cập đến bằng cách sử dụng jQuery
MLeFevre

52
đó không phải là một lý do để hạ cấp. câu hỏi không nói cụ thể là không sử dụng jquery, và bên cạnh những người khác đến đây để xem câu trả lời có thể không có những hạn chế giống như OP.
Kinjal Dixit

5
@KinjalDixit Nếu IMRUP muốn thêm một lưu ý rằng câu trả lời của anh ta không sử dụng vanilla JS và thay vào đó dựa vào jQuery, thì nó sẽ có một số giá trị, mặc dù câu hỏi ban đầu không được gắn thẻ cho jQuery / thậm chí đề cập đến jQuery. Vì hiện tại nó là câu trả lời khi sử dụng thư viện mà không đề cập đến việc đó, nên rất ít (mặc dù có thể là tất cả những gì cần thiết) và sử dụng một bộ chọn (sử dụng bộ chọn lớp trong khi nêu ID ?). Vì hiện tại, tôi không nghĩ đó là câu trả lời hữu ích cho câu hỏi này.
MLeFevre

3
Khi thêm một ví dụ jQuery (cách tiếp cận hoàn toàn hợp lệ IMHO), vui lòng cung cấp một ví dụ JS vanilla để so sánh và giải thích cho OP về sự khác biệt. Vì vậy, nhiều nhà phát triển mới ngày nay nghĩ rằng jQuery JavaScript. Một chút giáo dục sẽ giúp họ có những lựa chọn đúng đắn.
Mark Cooper

Tôi nghĩ rằng câu trả lời này rất hữu ích và liên quan đến câu hỏi.
mfnx

44

Bạn chỉ có thể điều khiển phong cách của div trong câu hỏi ...

document.getElementById('target').style.display = 'none';

Nhưng tôi cũng muốn nó hiển thị nội dung của div thứ hai
Jake Ols

20

Bạn có thể Ẩn / Hiển thị Div bằng chức năng Js. mẫu dưới đây

<script>
    function showDivAttid(){

        if(Your Condition) {

            document.getElementById("attid").style.display = 'inline';
        }
        else
        {
            document.getElementById("attid").style.display = 'none';
        }
    }

</script>

HTML -

<div  id="attid" style="display:none;">Show/Hide this text</div>

nếu bạn muốn sử dụng tên lớp thay vì Id, hãy sử dụng như document.getElementsByClassName ('CLASSNAME') [0] .style.display = 'none';
Vishwa

14

Sử dụng phong cách:

<style type="text/css">
   .hidden {
        display: none;
   {
   .visible {
        display: block;
   }
</style>

Sử dụng trình xử lý sự kiện trong JavaScript tốt hơn onclick=""thuộc tính trong HTML:

<button id="RenderPortfolio_Btn">View Portfolio</button>
<button id="RenderResults_Btn">View Results</button>

<div class="visible" id="portfolio">
    <span>div1</span>
</div>

<div class"hidden" id="results">
    <span>div2</span>
</div>

JavaScript:

<script type="text/javascript">

    var portfolioDiv = document.getElementById('portfolio');
    var resultsDiv = document.getElementById('results');

    var portfolioBtn = document.getElementById('RenderPortfolio_Btn');
    var resultsBtn = document.getElementById('RenderResults_Btn');

    portfolioBtn.onclick = function() {
        resultsDiv.setAttribute('class', 'hidden');
        portfolioDiv.setAttribute('class', 'visible');
    };

    resultsBtn.onclick = function() {
        portfolioDiv.setAttribute('class', 'hidden');
        resultsDiv.setAttribute('class', 'visible');
    };

</script>

jQuery có thể giúp bạn thao tác các phần tử DOM dễ dàng!


Bạn có thể thử hiddenthuộc tính của HTML5
bobobobo

12

Tôi thấy mã JavaScript đơn giản này rất tiện dụng!

#<script type="text/javascript">
    function toggle_visibility(id) 
    {
        var e = document.getElementById(id);
        if ( e.style.display == 'block' )
            e.style.display = 'none';
        else
            e.style.display = 'block';
    }
</script>

5

Đặt HTML của bạn là

<div id="body" hidden="">
 <h1>Numbers</h1>
 </div>
 <div id="body1" hidden="hidden">
 Body 1
 </div>

Và bây giờ đặt javascript là

function changeDiv()
  {
  document.getElementById('body').hidden = "hidden"; // hide body div tag
  document.getElementById('body1').hidden = ""; // show body1 div tag
  document.getElementById('body1').innerHTML = "If you can see this, JavaScript function worked"; 
  // display text if JavaScript worked
   }

1
<script type="text/javascript">
    function hide(){
        document.getElementById('id').hidden = true;
    }
    function show(){
        document.getElementById('id').hidden = false;
    }
</script>

Sử dụng Hidden cho một vấn đề như thế này có lẽ không phải là một ý tưởng hay - cũng như không được hỗ trợ trong các phiên bản IE trước 11, người đăng đang cố gắng thực hiện một cái gì đó tương đương với giao diện tab đơn giản và vì vậy các yếu tố sẽ không bị ẩn trong tất cả các bối cảnh. Trong tình huống này, có lẽ tốt hơn là sử dụng 'hiển thị' để kiểm soát việc ẩn - xem stackoverflow.com/questions/6708247/ chủ
John - Không phải là số

1

Chỉ đơn giản Đặt thuộc tính kiểu của ID:

Để hiển thị div ẩn

<div id="xyz" style="display:none">
     ...............
</div>
//In JavaScript

document.getElementById('xyz').style.display ='block';  // to hide

Để ẩn div hiển thị

<div id="xyz">
     ...............
</div>
//In JavaScript

document.getElementById('xyz').style.display ='none';  // to display

0

Và câu trả lời Purescript, cho những người sử dụng H halogen:

import CSS (display, displayNone)
import Halogen.HTML as HH
import Halogen.HTML.CSS as CSS

render state = 
  HH.div [ CSS.style $ display displayNone ] [ HH.text "Hi there!" ]

Nếu bạn "kiểm tra phần tử", bạn sẽ thấy một cái gì đó như:

<div style="display: none">Hi there!</div>

nhưng không có gì thực sự sẽ hiển thị trên màn hình của bạn, như mong đợi.


0

Chỉ cần chức năng đơn giản để thực hiện Hiển thị / ẩn 'div' bằng JavaScript

<a id="morelink" class="link-more" style="font-weight: bold; display: block;" onclick="this.style.display='none'; document.getElementById('states').style.display='block'; return false;">READ MORE</a>


<div id="states" style="display: block; line-height: 1.6em;">
 text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here  
    <a class="link-less" style="font-weight: bold;" onclick="document.getElementById('morelink').style.display='inline-block'; document.getElementById('states').style.display='none'; return false;">LESS INFORMATION</a>
    </div>

0

Tôi đã tìm thấy câu hỏi này và gần đây tôi đã triển khai một số UI bằng Vue.js vì vậy đây có thể là một lựa chọn tốt.

Đầu tiên mã của bạn không bị ẩn targetkhi bạn nhấp vào Xem hồ sơ. Bạn đang ghi đè nội dung targetvới div2.

let multiple = new Vue({
  el: "#multiple",
  data: {
    items: [{
        id: 0,
        name: 'View Profile',
        desc: 'Show profile',
        show: false,
      },
      {
        id: 1,
        name: 'View Results',
        desc: 'Show results',
        show: false,
      },
    ],
    selected: '',
    shown: false,
  },
  methods: {
    showItem: function(item) {
      if (this.selected && this.selected.id === item.id) {
        item.show = item.show && this.shown ? false : !item.show;
      } else {
        item.show = (this.selected.show || !item.show) && this.shown ? true : !this.shown;
      }
      this.shown = item.show;
      this.selected = item;
    },
  },
});
<div id="multiple">
  <button type="button" v-for="item in items" v-on:click="showItem(item)">{{item.name}}</button>

  <div class="" v-if="shown">: {{selected.desc}}</div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.7/vue.js"></script>


0

Bạn có thể dễ dàng đạt được điều này với việc sử dụng jQuery .toggle () .

$("#btnDisplay").click(function() {
  $("#div1").toggle();
  $("#div2").toggle();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="div1">
  First Div
</div>
<div id="div2" style="display: none;">
  Second Div
</div>
<button id="btnDisplay">Display</button>
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.