使用JavaScript显示/隐藏'div'


185

对于我正在做的网站,我想加载一个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的第二个功能不起作用,但第一个功能起作用。

Answers:


424

如何显示或隐藏元素:

为了显示或隐藏元素,请操纵元素的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

隐藏元素的集合:

如果要隐藏元素的集合,只需遍历每个元素并将元素的更改displaynone

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: none和之间切换display: block,这意味着以下内容可能会在显示元素集合时就足够了。

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属性的计算值来确定它是否可见。如果可见,则将其设置displaynone,否则将删除内联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'));
});


96

您还可以使用jQuery JavaScript框架:

隐藏Div块

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

显示Div Block

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

17
这个问题没有提到使用jQuery
MLeFevre 2015年

52
这不是拒绝投票的理由。这个问题并没有明确表示不使用jquery,此外其他人来这里查看答案可能与OP没有相同的限制。
Kinjal Dixit 2015年

5
@KinjalDixit如果IMRUP想要添加一条注释,说明他的答案没有使用香草JS,而是依赖jQuery,那么它将具有一些优点,即使原始问题没有为jQuery标记,甚至没有提到jQuery。就目前而言,这是使用库的答案,而没有提及它这样做,几乎没有(尽管可能是所有必要的)解释,并且混淆了选择器的使用(在声明ID的同时使用类选择器)。从目前的情况来看,我认为这不是对这个问题有用的答案。
MLeFevre

3
当添加一个jQuery示例(这是完全有效的方法IMHO)时,请同时提供一个普通的JS示例进行比较,并向OP解释区别。如今,许多新开发人员认为jQuery JavaScript。一点点教育就能帮助他们做出正确的选择。
马克·库珀

我认为这个答案非常有用,并且与问题有关。
mfnx

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

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

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>

对于这样的问题使用“隐藏”可能不是一个好主意-以及11之前的IE版本中不受支持,发布者实际上是在尝试做等效于简单选项卡界面的操作,因此元素不会隐藏在其中所有背景。在这种情况,它可能更好地使用“显示”,以控制隐藏-见stackoverflow.com/questions/6708247/...
约翰-非数字

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实现Show / hide'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当您单击“查看配置文件”时,您的代码没有隐藏。要覆盖内容targetdiv2

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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.