JavaScriptを使用して「div」を表示/非表示


185

私が実行しているWebサイトの場合、1つのdivをロードして別のdivを非表示にしてから、JavaScriptを使用してdiv間でビューを切り替える2つのボタンを用意します。

これは私の現在のコードです

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を置き換える2番目の関数は機能していませんが、最初の関数は機能しています。

回答:


429

要素を表示または非表示にする方法:

要素を表示または非表示にするには、要素のスタイルプロパティを操作します。ほとんどの場合、おそらく要素の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、以下のことを意味するかもしれ要素のコレクションを表示するときに十分なもので。

オプションdisplayで、デフォルトのにしたくない場合は、2番目の引数としてdesired を指定できます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 2015年

3
jQueryの例を追加する場合(これは完全に有効な方法であるIMHO)、比較のためにバニラJSの例も提供し、OPに違いを説明してください。最近では、多くの新しい開発者がjQuery JavaScriptであると考えています。少しの教育は彼らが正しい選択をするのを助けるでしょう。
Mark Cooper

この回答は非常に役に立ち、質問に関連していると思います。
mfnx 2018

44

問題のdivのスタイルを簡単に操作できます...

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

しかし、私は同様に第二のdivのコンテンツを表示することを希望
ジェイク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 2017年

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>

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を使用すると、DOM要素を簡単に操作できます。


HTML5 のhidden属性を試すことができます
bobobobo 2017年

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>

そして、JavaScriptを次のように設定します

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>

このような問題に対して非表示を使用することはおそらくお勧めできません-IEバージョン11以前ではサポートされていないだけでなく、ポスターは単純なタブインターフェイスと同等のことを効果的に実行しようとしているため、要素は非表示になりませんすべてのコンテキスト。この種の状況では、おそらく 'display'を使用して非表示を制御する方が良いでしょう。stackoverflow.com/ questions / 6708247 /…を
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.