JavaScript를 사용하여 'div'표시 / 숨기기


185

내가하고있는 웹 사이트의 경우 하나의 div를로드하고 다른 div를 숨기고 JavaScript를 사용하여 div간에보기를 전환하는 두 개의 버튼이 있습니다.

이것은 내 현재 코드입니다

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>

div2를 대체하는 두 번째 기능은 작동하지 않지만 첫 번째 기능입니다.

답변:


429

요소를 표시하거나 숨기는 방법 :

요소를 표시하거나 숨기려면 요소의 style 속성을 조작하십시오 . 대부분의 경우 요소를 변경하고 싶을 것입니다.display 속성 .

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

또는 요소가 여전히 공간을 차지하도록하려면 (예 : 테이블 셀을 숨기려는 경우) 요소의 속성을 변경할 수 있습니다visibility 대신 .

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

요소 모음 숨기기 :

당신은 요소의 컬렉션을 숨길 단지 반복 처리의 각 요소에 걸쳐 및 요소의 변경하려는 경우 display에를 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'));

요소 모음 표시 :

대부분의 시간, 당신은 아마 사이에 전환 될 것입니다 display: nonedisplay: block있는 수단, 그 다음 5 월 있습니다. 즉, 요소 ​​모음을 표시 할 때 충분할 있습니다.

선택적으로 원하는 display것을 두 번째 인수로 지정할 수 있습니다 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

또는 요소를 표시하는 더 좋은 방법은 인라인 display스타일을 제거하여 요소 를 초기 상태로 되 돌리는 것입니다. 그런 다음 display계단식 규칙으로 요소가 숨겨져 있는지 확인하기 위해 계산 된 요소 스타일을 확인하십시오 . 그렇다면 요소를 표시하십시오.

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';
    }
  }
}

(한 단계 더 나아가고 싶다면 jQuery의 기능을 흉내 내고 iframe충돌하는 스타일 시트없이 요소를 공백에 추가하여 요소의 기본 브라우저 스타일을 결정한 다음 계산 된 스타일을 검색 할 수도 있습니다. 진정한 이니셜을 알게 될 것이다display 요소 속성 값을 원하는 결과를 얻기 위해 값을 하드 코딩 할 필요가 없습니다.)

디스플레이 토글 :

마찬가지로 display요소 또는 요소 컬렉션 을 토글하려면 각 요소를 반복하고 display속성 의 계산 된 값을 확인하여 해당 요소가 표시되는지 여부를 결정할 수 있습니다 . 이 볼의 경우, 설정 display에를 none달리 인라인 제거, display스타일링, 그리고 여전히 숨겨져 경우를 설정 display, 지정된 값 또는 하드 코딩 된 기본값으로 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'));
});


97

jQuery JavaScript 프레임 워크를 사용할 수도 있습니다 .

Div 블록을 숨기려면

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

Div 블록을 표시하려면

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

17
이 질문은 jQuery를 사용하는 것을 언급하지 않습니다
MLeFevre

53
다운 다운 이유가 아닙니다. 이 질문은 특별히 jquery를 사용하지 않는다고 말하지 않으며, 여기에 오는 사람들 외에 답변을보기 위해 OP와 동일한 제약 조건이 없을 수 있습니다.
Kinjal Dixit

5
@KinjalDixit IMRUP이 그의 답변이 바닐라 JS를 사용하지 않고 대신 jQuery를 사용한다는 메모를 추가하려는 경우 원래 질문에 jQuery 태그가 지정되어 있지 않아도 jQuery에 태그가 지정되지 않아도 장점이 있습니다. 현재로서는 라이브러리를 사용하여 답변을 제공하지만, (필요한 것은 아니지만) 설명이 거의 없으며, 선택기의 사용을 혼란스럽게합니다 ( ID 를 나타내는 동안 클래스 선택기를 사용 ). 현재로서는이 질문에 유용한 답변이라고 생각하지 않습니다.
MLeFevre

3
jQuery 예제 (완전히 유효한 접근법 IMHO 임)를 추가 할 때 비교를위한 바닐라 JS 예제를 제공하고 차이점을 OP에 설명하십시오. 요즘 많은 새로운 개발자들은 jQuery JavaScript 라고 생각 합니다. 약간의 유혹은 그들이 올바른 선택을하는 데 도움이 될 것입니다.
Mark Cooper

이 답변이 매우 유용했으며 질문과 관련이 있다고 생각합니다.
mfnx

44

문제의 div 스타일을 간단히 조작 할 수 있습니다 ...

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

그러나 두 번째 div의 내용도 표시하고 싶습니다
Jake Ols

20

Js 기능을 사용하여 Div를 숨기거나 표시 할 수 있습니다. 아래 샘플

<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>

Id 대신 클래스 이름을 사용하려면 다음과 같이 사용하십시오. document.getElementsByClassName ( 'CLASSNAME') [0] .style.display = 'none';
Vishwa

14

스타일 사용하기 :

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

JavaScript에서 이벤트 핸들러를 사용하는 것이 onclick=""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>

자바 스크립트 :

<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 를 사용하면 DOM 요소를 쉽게 조작 할 수 있습니다!



12

이 일반 JavaScript 코드가 매우 편리하다는 것을 알았습니다!

#<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

HTML을 다음과 같이 설정하십시오.

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

이제 자바 스크립트를

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>

이와 같은 문제에 대해 Hidden을 사용하는 것은 좋은 생각이 아닙니다 .11 이전의 IE 버전에서는 지원되지 않을뿐 아니라, 포스터는 간단한 탭 인터페이스와 동등한 기능을 효과적으로 수행하려고하므로 요소가 숨겨지지 않습니다. 모든 상황. 이런 상황에서는 '디스플레이'를 사용하여 숨기기를 제어하는 ​​것이 좋습니다.- stackoverflow.com
John-Not A Number

1

그냥 단순 ID의 스타일 속성을 설정하십시오.

숨겨진 div를 표시하려면

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

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

표시된 div를 숨기려면

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

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

0

그리고 할로겐을 사용하는 사람들을위한 Purescript 답변 :

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!" ]

"요소 검사"하면 다음과 같은 내용이 표시됩니다.

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

그러나 실제로 예상대로 화면에 아무것도 표시되지 않습니다.


0

그냥 간단한 기능 JavaScript를 사용하여 'div'표시 / 숨기기를 구현해야합니다.

<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

나는이 질문을 발견하고 최근에 Vue.js를 사용하여 일부 UI를 구현하고 있었으므로 이것이 좋은 대안이 될 수 있습니다.

먼저 target프로필보기를 클릭 해도 코드가 숨겨지지 않습니다 . 로 콘텐츠 target를 재정의하고 있습니다 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

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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.