javascript - 使用通用类 javascript 显示/隐藏 div,无 Jquery

标签 javascript html

我在尝试隐藏多个具有相同类的 div 时遇到了麻烦。我希望能够单击某个单选按钮,该按钮将仅显示与该 ID 相关的数据。我试图创建一个函数来执行此操作,但无法使其正常运行。这是我一直在研究的 fiddle https://jsfiddle.net/uncj8wzf/

function hide_row(staff){
    if (staff == "manager"){
        if (document.getElementsByClassName("manager").style.display == "block")
           {document.querySelectorAll("employee").style.display = "none"}
        }
        else if (staff == "employee") {
            if (document.getElementsByClassName("manager").style.display == "none";)
            {document.querySelectorAll("employee").style.display = "block";}
        }            
        else if (staff == "all"){
           document.querySelectorAll("manager").style.display = "block";
           document.querySelectorAll("employee").style.display = "block";
        }
    }

<form>
<input type="radio"  onclick= "hide_row('manager')">manager<br>
<input type="radio"  onclick= "hide_row('employee')">employee<br>
<input type="radio"  onclick= "hide_row('all')">all
</form>

<div class="manager">manger text</div>
<div class="manager">manger text</div>
<div class="manager">manger text</div>
<div class="manager">manger text</div>


<div class="employee">employee text</div>
<div class="employee">employee text</div>
<div class="employee">employee text</div>
<div class="employee">employee text</div>

最佳答案

您的代码中有一些部分对我来说毫无意义。

为什么在 hide_row 函数中使用 if 语句?具体

if (document.getElementsByClassName("manager").style.display == "block")

还有

if (document.getElementsByClassName("manager").style.display == "none";)

您肯定只想分配这些显示,而不是检查它们,对吧? (而且分号不应该在那里)

getElementsByClassName 或 querySelectorAll 的结果是数组。您需要循环遍历结果来分配显示值。

最后,不要忘记为单选按钮提供相同的 name 属性,以便它们取消选择组中的其他按钮。

这是一个可以运行的代码片段:

let managerDivs = document.getElementsByClassName("manager");
let employeeDivs = document.getElementsByClassName("employee");
let allDivs = [...managerDivs, ...employeeDivs];

function hide_row(staff) {

  // reveal all the divs, then hide those that need to be hidden
  for (let el of allDivs) {
    el.style.display = "block";
  }

  if (staff == "manager") {
    for (let el of employeeDivs) {
      el.style.display = "none";
    }
  } else if (staff == "employee") {
    for (let el of managerDivs) {
      el.style.display = "none";
    }
  }
}
<form>
<input type="radio" name="showHide" onclick= "hide_row('manager')">manager<br>
<input type="radio" name="showHide" onclick= "hide_row('employee')">employee<br>
<input type="radio" name="showHide" onclick= "hide_row('all')">all
</form>

<div class="manager">manger text</div>
<div class="manager">manger text</div>
<div class="manager">manger text</div>
<div class="manager">manger text</div>


<div class="employee">employee text</div>
<div class="employee">employee text</div>
<div class="employee">employee text</div>
<div class="employee">employee text</div>

关于javascript - 使用通用类 javascript 显示/隐藏 div,无 Jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58702186/

相关文章:

javascript - JS/jQuery - 如何一次获取两个 DIV 内容的文本?

javascript - 提交表单时隐藏 DIV

javascript - 错误消息 无法在 'appendChild' : parameter 1 is not of type 'Node' 上执行 'Node'

html - 如何使用CSS在网站中添加光标?

html - 隐藏 CSS 溢出

javascript - 在 Cookie Javascript 中设置过期时间

javascript - 将数据插入工作表并发送电子邮件

javascript - div 下的 span,当悬停在 div 上时希望 span 消失

javascript - 在 JavaScript 中是否可以以编程方式启动文件浏览器对话框?

jquery - 在 JQuery 中使用 !important 更改 CSS - 使用 Bootstrap 3