Javascript 用“单击”隐藏div;getElementsByClassName";

Javascript 用“单击”隐藏div;getElementsByClassName";,javascript,html,css,Javascript,Html,Css,我尝试在按钮上实现一个事件。 当我用.onclick事件单击它时,我将隐藏另一个div 问题是,我有一个列表,其中包含同一个类的多个div,因此代码没有编写 <article class="content__box"> <h1 class="content__title">About me</h1> <div class="content__hide"><span class="fa fa-minus">&l

我尝试在按钮上实现一个事件。 当我用.onclick事件单击它时,我将隐藏另一个div

问题是,我有一个列表,其中包含同一个类的多个div,因此代码没有编写

      <article class="content__box">
    <h1 class="content__title">About me</h1>
    <div class="content__hide"><span class="fa fa-minus"></span></div>
    <div class="content__text">
      <p>My text here</p>
    </div>
  </article>
  <article class="content__box">
    <h1 class="content__title">About me</h1>
    <div class="content__hide"><span class="fa fa-minus"></span></div>
    <div class="content__text">
      <p>My text here</p>
    </div>
  </article>

提前谢谢

假设我有一个图标(
),我用它作为id=“searchbutton”的按钮,如果我点击它,我想显示一个文本框,如果它打开,我再次点击,我想让它消失。试试这个:

<i class="fa fa-search" aria-hidden="true" id="searchbutton"></i>
<input id="searchtext" type="text">
假设我有一个图标(
),用作id=“searchbutton”的按钮,如果我单击它,我想显示一个文本框,如果它打开,我再次单击,我想让它消失。试试这个:

<i class="fa fa-search" aria-hidden="true" id="searchbutton"></i>
<input id="searchtext" type="text">

用正在修改的内容块替换两个函数中的参数。正如其他人在注释中所述,
getElementsByClassName
将返回一个HTML集合,而不是一个单一元素
querySelectorAll
(只抓取一个元素)也不会太好,这就是为什么我建议只传递元素本身

再次尝试将事件处理程序添加到HTML集合。您需要使用
array.from()
array.prototype.forEach.call()
将集合转换为数组,以循环并分别为每个按钮分配一个处理程序

在事件处理程序中,删除任意变量,而是检查内容块本身的可见性。有很多方法可以找到块,但因为它们是直接同级
,所以这个。nextElementSibling
就足够了。最后检查它是隐藏的,内联的还是从样式表中隐藏的。检查样式表的成本有点高,但这是您必须采取的措施,因为在加载时,块最初并不是内联隐藏的

var buttons=document.getElementsByClassName('content\uu hide');
函数隐藏(内容){
content.style.display=“无”;
}
功能展示(内容){
content.style.display=“block”;
}
数组.from(按钮).forEach(函数(按钮){
addEventListener('click',function(){
var content=this.nextElementSibling;
var contentIsVisible=content.style.display=='block'| | getComputedStyle(内容)。display&&getComputedStyle(内容)。display=='block';
如果(内容可见){
隐藏(内容);
}否则{
节目(内容);
}
});
});
.content\u\u框{
利润率:20px0;
}
.内容\标题{
字体大小:400;
颜色:#999;
字号:26px;
字体系列:“蒙特塞拉特”,无衬线;
边际:0px;
显示:内联块;
}
.content\uu隐藏{
浮动:对;
显示:内联块;
边缘顶部:5px;
光标:指针;
字体大小:22px;
颜色:#999;
}
.content\u文本{
背景:#fff;
填充:12px;
颜色:#000;
利润率:10px0;
}
.content\uu text p{
保证金:0px 0px 12px 0px;
}

德普雷
隐藏
Lorem Ipsum este purşi simplu o machetăpentru text a industrie tipografice。Lorem Ipsum是十六世纪的一个行业标准,它是一个计划和文字的统一体,是一个按需定制的企业
分别说明。因此,我们需要一个电子实践学院。60年来,阿尼尼的第一次流行是艾拉·科利勒(irea colilor Letraset care conţineau pasaje)
Lorem Ipsum,iar mai NEXT,pentru calculator公共计算机首席程序,ca Aldus PageMaker care,包括Lorem Ipsum大学版本

Lorem Ipsum este purşi simplu o machetăpentru text a industrie tipografice。Lorem Ipsum是十六世纪的一个行业标准,它是一个计划和文字的统一体,是一个按需定制的企业 分别说明。因此,我们需要一个电子实践学院。60年来,阿尼尼的第一次流行是艾拉·科利勒(irea colilor Letraset care conţineau pasaje) Lorem Ipsum,iar mai NEXT,pentru calculator公共计算机首席程序,ca Aldus PageMaker care,包括Lorem Ipsum大学版本

德普雷 隐藏 Lorem Ipsum este purşi simplu o machetăpentru text a industrie tipografice。Lorem Ipsum是十六世纪的一个行业标准,它是一个计划和文字的统一体,是一个按需定制的企业 分别说明。因此,我们需要一个电子实践学院。60年来,阿尼尼的第一次流行是艾拉·科利勒(irea colilor Letraset care conţineau pasaje) Lorem Ipsum,iar mai NEXT,pentru calculator公共计算机首席程序,ca Aldus PageMaker care,包括Lorem Ipsum大学版本

Lorem Ipsum este purşi simplu o machetăpentru text a industrie tipografice。Lorem Ipsum是十六世纪的一个行业标准,它是一个计划和文字的统一体,是一个按需定制的企业 分别说明。因此,我们需要一个电子实践学院。60年来,阿尼尼的第一次流行是艾拉·科利勒(irea colilor Letraset care conţineau pasaje) Lorem Ipsum,iar mai NEXT,pentru calculator公共计算机首席程序,ca Aldus PageMaker care,包括Lorem Ipsum大学版本


用正在修改的内容块替换两个函数中的参数。正如其他人在注释中所述,
getElementsByClassName
将返回一个HTML集合,而不是一个单一元素
querySelectorAll
(只获取一个元素)也不会太好用
for(let btn of document.getElementsByClassName('content__hide')){
  btn.onclick=function(){
    this.parentNode.querySelector(".content__text").style.display="none";
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
$(document).ready(function(){
$('.content__hide').click(function(){       
    $(this).siblings('.content__text').hide();
});