在没有jQuery的情况下切换HTML元素上的类

Kit*_*ngs 23 html javascript css

我的网站上有一个部分包含所有内容,但我想要一个带有隐藏内容的"侧边栏",可以通过外部按钮从左侧平滑显示.

CSS转换可以处理平滑性没问题,jQuery toggle()可以在类之间切换,将隐藏的div移入和移出屏幕.

如何在不使用jQuery的情况下获得相同的效果?

das*_*jad 32

您只能通过CSS3实现它:

<label for="showblock">Show Block</label>
<input type="checkbox" id="showblock" />

<div id="block">
    Hello World
</div>
Run Code Online (Sandbox Code Playgroud)

而CSS部分:

#block {
    background: yellow;
    height: 0;
    overflow: hidden;
    transition: height 300ms linear;
}

label {
    cursor: pointer;
}

#showblock {
    display: none;
}

#showblock:checked + #block {
    height: 40px;
}
Run Code Online (Sandbox Code Playgroud)

魔术是隐藏的checkbox:checked在CSS选择器.

工作jsFiddle演示.

  • 太棒了!!甚至没有任何js !!! 如果可以的话,我会多次提出这个答案:DI喜欢这个解决方案!它甚至比我能想象到的最简单的j更好!你先生,赢得了5000个互联网,但是因为我不能在没有15+代表的情况下进行投票,所以我会给你这个,希望它可以在你脸上露出笑容; https://www.youtube.com/watch?v=V-1gjOKKoRY (3认同)
  • 一句话:辉煌! (2认同)

小智 25

如果您乐意只支持更多现代浏览器,可以使用classList.toggle()函数切换类:

var element = document.getElementById('sidebar');
var trigger = document.getElementById('js-toggle-sidebar'); // or whatever triggers the toggle

trigger.addEventListener('click', function(e) {
    e.preventDefault();
    element.classList.toggle('sidebar-active'); // or whatever your active class is
});
Run Code Online (Sandbox Code Playgroud)

这应该做你需要的一切 - 如果你有多个触发器,我建议使用document.querySelectorAll(selector).

希望有所帮助

  • 他很乐意只支持现代浏览器,因为他提到它时,他正在使用css3过渡. (2认同)

Mia*_*Kim 7

仅 HTML

您可以使用<summary>。以下代码没有任何依赖性。根本没有 JavaScript、CSS,只有 HTML。

<div class="bd-example">
  <details open="">
    <summary>Some details</summary>
    <p>More info about the details.</p>
  </details>

  <details>
    <summary>Even more details</summary>
    <p>Here are even more details about the details.</p>
  </details>
</div>
Run Code Online (Sandbox Code Playgroud)

更多详细信息,请参阅MDN 官方文档

  • 我不确定是否可以使用 CSS 将其样式设置为侧边栏,因为我从未尝试过。即使可以,也绝对不是语义的。不过,用于显示未充分利用的 HTML 元素的道具。我不会投反对票。 (2认同)

Vic*_*adu 5

你可以通过javascript获取任何元素(没有jquery),并且类是一个属性:element.className所以将它作为一个函数:

更新: 因为这变得有点流行,我更新了功能,使其更好.

function toggleClass(element, toggleClass){
   var currentClass = element.className;
   var newClass;
   if(currentClass.split(" ").indexOf(toggleClass) > -1){ //has class
      newClass = currentClass.replace(new RegExp('\\b'+toggleClass+'\\b','g'),"")
   }else{
      newClass = currentClass + " " + toggleClass;
   }
   element.className = newClass.trim();
}
Run Code Online (Sandbox Code Playgroud)