提问者:小点点

如何优化显示一个块而隐藏其他块的代码?(javascript)


我有3个格挡,开一个的时候,都要躲起来。我写了最简单的代码(我是一个初学者),我明白它可以而且应该被优化。我怎么能那么做?我在考虑使用“if else”结构,但不知道如何正确使用。

null

function openLink(){
  document.getElementsByClassName('open_link')[0].style.display = 'block';
  document.getElementsByClassName('open_images')[0].style.display = 'none';
  document.getElementsByClassName('open_video')[0].style.display = 'none';
}

function openImages(){
  document.getElementsByClassName('open_images')[0].style.display = 'block';
  document.getElementsByClassName('open_link')[0].style.display = 'none';
  document.getElementsByClassName('open_video')[0].style.display = 'none';
}

function openVideo(){
  document.getElementsByClassName('open_video')[0].style.display = 'block';
  document.getElementsByClassName('open_images')[0].style.display = 'none';
  document.getElementsByClassName('open_link')[0].style.display = 'none';
}

function closeForm(){
  document.getElementsByClassName('open_link')[0].style.display = 'none';
  document.getElementsByClassName('open_images')[0].style.display = 'none';
  document.getElementsByClassName('open_video')[0].style.display = 'none';
}
<a onclick="openLink()" href='#'>One</a>
<a onclick="openVideo()" href='#'>Two</a>
<a onclick="openImages()" href='#'>Three</a>


<div class="open_link" style="display: none;">
<button onclick="closeForm()">Save 1</button>
<button onclick="closeForm()">Close 1</button>
</div>

<div class="open_video" style="display: none;">
<button onclick="closeForm()">Save 2</button>
<button onclick="closeForm()" >Close 2</button>
</div>

<form class="open_images" style="display: none;">
<input onclick="closeForm()" value="Upload 3"/>
<button onclick="closeForm()" >Close 3</button>
</form>

null


共3个答案

匿名用户

委托

这里是一个开始

null

const content = document.getElementById("content");
document.getElementById("nav").addEventListener("click", function(e) {
  const tgt = e.target;
  const id = tgt.dataset.id;
  [...content.querySelectorAll("div")].forEach(div => {
    if (div.id !== id) div.classList.add("hide");
  })  
  document.getElementById(id).classList.remove("hide");
    
})

content.addEventListener("click", function(e) {
  const tgt = e.target;
  if (tgt.classList.contains("close")) {
    tgt.closest("div").classList.add("hide")
  }
})
.hide {
  display: none;
}
<div id="nav">
  <a data-id="link" href='#'>One</a>
  <a data-id="video" href='#'>Two</a>
  <a data-id="images" href='#'>Three</a>
</div>

<div id="content">
  <div id="link" class="hide">
    <button type="button" id="save1">Save 1</button>
    <button type="button" class="close">Close 1</button>
  </div>

  <div id="video" class="hide">
    <button type="button" id="save2">Save 2</button>
    <button type="button" class="close">Close 2</button>
  </div>
  <div id="images" class="hide">
    <form>
      <input id="upload" value="Upload 3" />
      <button type="button" class="close">Close 3</button>
    </form>
  </div>
</div>

匿名用户

您可以将您的一些冗余代码归纳为一个函数,并将参数传递给它。

null

function openAndClose(classBlock, classNone, classNone1) {
  document.getElementsByClassName(classBlock)[0].style.display = 'block';
  document.getElementsByClassName(classNone)[0].style.display = 'none';
  document.getElementsByClassName(classNone1)[0].style.display = 'none'
}

function closeForm(){
  document.getElementsByClassName('open_link')[0].style.display = 'none';
  document.getElementsByClassName('open_images')[0].style.display = 'none';
  document.getElementsByClassName('open_video')[0].style.display = 'none';
}
<a onclick="openAndClose('open_link', 'open_images', 'open_video')" href='#'>One</a>
<a onclick="openAndClose('open_video', 'open_images', 'open_link')" href='#'>Two</a>
<a onclick="openAndClose('open_images', 'open_link', 'open_video')" href='#'>Three</a>


<div class="open_link" style="display: none;">
<button onclick="closeForm()">Save 1</button>
<button onclick="closeForm()">Close 1</button>
</div>

<div class="open_video" style="display: none;">
<button onclick="closeForm()">Save 2</button>
<button onclick="closeForm()" >Close 2</button>
</div>

<form class="open_images" style="display: none;">
<input onclick="closeForm()" value="Upload 3"/>
<button onclick="closeForm()" >Close 3</button>
</form>

匿名用户

尝试使用您自己的id和类br>.open是div到openbr>target的id是您的div的id,您使用的是类

document.querySelectorAll(".open").forEach(div => {
        div.onclick = (e) => {
            switch (e.target.id) {
                case "open_link":
                    openLink()
                    break;
                case "open_video":
                    openVideo()
                    break;
                case "open_images":
                    openImages()
                break;
            }
        }
    })