用按钮切换显示/隐藏 div?

IT技术 javascript jquery css
2021-01-21 18:46:08

希望这是一个简单的问题。我有一个div我想用按钮切换隐藏/显示

<div id="newpost">
6个回答

纯 JavaScript:

var button = document.getElementById('button'); // Assumes element with id='button'

button.onclick = function() {
    var div = document.getElementById('newpost');
    if (div.style.display !== 'none') {
        div.style.display = 'none';
    }
    else {
        div.style.display = 'block';
    }
};

看演示

jQuery

$("#button").click(function() { 
    // assumes element with id='button'
    $("#newpost").toggle();
});

看演示

谢谢,@Andrew 我还发现在新的 jQuery 中有fadeToggle
2021-03-14 18:46:08
@deemeetree:您可以传递'slow'toggle. 如果您使用的是纯 JS 解决方案,请告诉我,我可以为此想出一些办法
2021-03-16 18:46:08
@BarryDoyle:实际上,切换事件在 1.8 中已被弃用。此答案使用切换的方式仍然可用,请参阅此示例:jsfiddle.net/KpFRb/532
2021-03-22 18:46:08
嗨,知道如何让它以漂亮的淡入/淡出切换吗?
2021-03-30 18:46:08
我正在检查其他问题,我在这个线程中找到了一个答案:stackoverflow.com/questions/18808112/ ... ... 显然这是因为新版本的 JQuery 不再支持切换了。
2021-04-07 18:46:08

看看jQuery 切换

HTML:

<div id='content'>Hello World</div>
<input type='button' id='hideshow' value='hide/show'>

jQuery:

jQuery(document).ready(function(){
    jQuery('#hideshow').live('click', function(event) {        
         jQuery('#content').toggle('show');
    });
});

对于 jQuery 1.7 和更新的版本使用

jQuery(document).ready(function(){
    jQuery('#hideshow').on('click', function(event) {        
        jQuery('#content').toggle('show');
    });
});

作为参考,请查看此演示

现在 .live() 在 1.7 中已弃用,并在 1.9 中删除,因此在新版本中您可以使用 .on() (有关详细信息api.jquery.com/on
2021-03-15 18:46:08
您如何将其设置为默认隐藏?编辑:想通了,只是在捕捉按钮按下的代码之前添加了切换。
2021-03-18 18:46:08
我想toggle('show')是一个错字(有些人公然复制并粘贴到其他答案中),因为只有'slow''fast'是持续时间被接受的字符串。尽管如此,它仍然有效,因为我认为任何无效的字符串都会默认为'slow'. jsfiddle.net/d5y06e6o
2021-03-21 18:46:08
没有 jQuery 怎么样?每个人都可以用jQ做到
2021-03-26 18:46:08

JavaScript - 切换Element.styleMDN

var toggle  = document.getElementById("toggle");
var content = document.getElementById("content");

toggle.addEventListener("click", function() {
  content.style.display = (content.dataset.toggled ^= 1) ? "block" : "none";
});
#content{
  display:none;
}
<button id="toggle">TOGGLE</button>
<div id="content">Some content...</div>

关于^按位异或作为 I/O 切换器
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset

JavaScript - 切换 .classList.toggle()

var toggle  = document.getElementById("toggle");
var content = document.getElementById("content");

toggle.addEventListener("click", function() {
  content.classList.toggle("show");
});
#content{
  display:none;
}
#content.show{
  display:block; /* P.S: Use `!important` if missing `#content` (selector specificity). */
}
<button id="toggle">TOGGLE</button>
<div id="content">Some content...</div>

jQuery - 切换

.toggle()文档.fadeToggle()文档.slideToggle()文档

$("#toggle").on("click", function(){
  $("#content").toggle();                 // .fadeToggle() // .slideToggle()
});
#content{
  display:none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="toggle">TOGGLE</button>
<div id="content">Some content...</div>

jQuery - 切换.toggleClass()文档

.toggle()切换元素的display "block"/"none"

$("#toggle").on("click", function(){
  $("#content").toggleClass("show");
});
#content{
  display:none;
}
#content.show{
  display:block; /* P.S: Use `!important` if missing `#content` (selector specificity). */
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="toggle">TOGGLE</button>
<div id="content">Some content...</div>

HTML5 - 切换使用<summary><details>

(在 IE 和 Opera Mini 上不受支持)

<details>
  <summary>TOGGLE</summary>
  <p>Some content...</p>
</details>

HTML - 切换使用 checkbox

[id^=toggle],
[id^=toggle] + *{
  display:none;
}
[id^=toggle]:checked + *{
  display:block;
}
<label for="toggle-1">TOGGLE</label>

<input id="toggle-1" type="checkbox">
<div>Some content...</div>

HTML - 切换使用 radio

[id^=switch],
[id^=switch] + *{
  display:none;
}
[id^=switch]:checked + *{
  display:block;
}
<label for="switch-1">SHOW 1</label>
<label for="switch-2">SHOW 2</label>

<input id="switch-1" type="radio" name="tog">
<div>1 Merol Muspi...</div>

<input id="switch-2" type="radio" name="tog">
<div>2 Lorem Ipsum...</div>

CSS - 切换使用 :target

(只是为了确保你的武器库中有它)

[id^=switch] + *{
  display:none;
}
[id^=switch]:target + *{
  display:block;
}
<a href="#switch1">SHOW 1</a>
<a href="#switch2">SHOW 2</a>

<i id="switch1"></i>
<div>1 Merol Muspi ...</div>

<i id="switch2"></i>
<div>2 Lorem Ipsum...</div>


动画类过渡

如果您选择一种 JS / jQuery 方式来实际切换 a className,则始终可以向元素添加动画过渡,这是一个基本示例:

var toggle  = document.getElementById("toggle");
var content = document.getElementById("content");

toggle.addEventListener("click", function(){
  content.classList.toggle("appear");
}, false);
#content{
  /* DON'T USE DISPLAY NONE/BLOCK! Instead: */
  background: #cf5;
  padding: 10px;
  position: absolute;
  visibility: hidden;
  opacity: 0;
          transition: 0.6s;
  -webkit-transition: 0.6s;
          transform: translateX(-100%);
  -webkit-transform: translateX(-100%);
}
#content.appear{
  visibility: visible;
  opacity: 1;
          transform: translateX(0);
  -webkit-transform: translateX(0);
}
<button id="toggle">TOGGLE</button>
<div id="content">Some Togglable content...</div>

@ProgrammingHobby 绝对,如果您想使上述容器之一(使用:target切换方法)“默认打开”,只需将所需的哈希ID添加到页面 URI,即:index.html#switch1- 并立即打开元素 ID switch1。您还可以使用 JS 操作 URL 对象URL.hash- 如果需要:developer.mozilla.org/en-US/docs/Web/API/URL/hash
2021-03-17 18:46:08
你不能display: none用过渡元素
2021-03-27 18:46:08
@Green 不,你不能。这就是动画示例的原因。
2021-03-30 18:46:08
@Roko C. Buljan 非常感谢先生。祝您有美好的一天。您的回答很棒,我在我的许多项目中都使用了它。谢谢。
2021-03-30 18:46:08
嗨,@Roko C 先生。Buljan 有没有办法在 CSS 中最初显示 div - 使用 :target 切换开关,请帮助我真的需要那个。谢谢。
2021-04-07 18:46:08

这是一种简单的 Javascript 切换方式:

<script>
  var toggle = function() {
  var mydiv = document.getElementById('newpost');
  if (mydiv.style.display === 'block' || mydiv.style.display === '')
    mydiv.style.display = 'none';
  else
    mydiv.style.display = 'block'
  }
</script>

<div id="newpost">asdf</div>
<input type="button" value="btn" onclick="toggle();">
不错,简单的 JavaScript 解决方案。我只是建议输入类型是按钮而不是提交,因为提交将发布表单......
2021-04-02 18:46:08

尝试不透明度