当函数取消隐藏2个元素时,如何在javascript中显示/隐藏?

当函数取消隐藏2个元素时,如何在javascript中显示/隐藏?,javascript,html,show-hide,Javascript,Html,Show Hide,我有一个javascript可以同时隐藏/取消隐藏html中的2个元素。当它只有一个的时候,它工作得很好,但是现在由于某种原因,当我点击两次的时候,一些元素就消失了,我不知道错误在哪里,这是代码,以防有人发现错误,谢谢。 函数取消隐藏给定div id的两个元素(xdivID和divID),并保持父级和祖级可见(idParent-idbulk) 函数双重取消隐藏(xdivID、divID、idParent、IDBUFF){ var xitem=document.getElementById(xdi

我有一个javascript可以同时隐藏/取消隐藏html中的2个元素。当它只有一个的时候,它工作得很好,但是现在由于某种原因,当我点击两次的时候,一些元素就消失了,我不知道错误在哪里,这是代码,以防有人发现错误,谢谢。 函数取消隐藏给定div id的两个元素(xdivID和divID),并保持父级和祖级可见(idParent-idbulk)

函数双重取消隐藏(xdivID、divID、idParent、IDBUFF){
var xitem=document.getElementById(xdivID);
if(xitem){
xitem.className='unhidden';
}
var item=document.getElementById(divID);
如果(项目){
item.className='unhidden';
}
var elements=getElementsByClassName(文档,“未隐藏”);
var n=元素长度;
对于(变量i=0;i
下面是它在html中的实现方式:

<div id="prj" class="hidden" style="margin-left:1em">
    <a href="javascript:doubleunhide('prj011', 'prj01numbers', 'prj', 'nil');" style="text-decoration:none; color: rgb(0,0,0)" id="prj01link">Project 01</a> <br>
    <a href="javascript:doubleunhide('prj021', 'prj02numbers', 'prj', 'nil');" style="text-decoration:none; color: rgb(0,0,0)" id="prj02link">Project 02</a> <br>
    <a href="javascript:doubleunhide('prj031', 'prj03numbers', 'prj', 'nil');" style="text-decoration:none; color: rgb(0,0,0)" id="prj03link">Project 03</a> <br>
    Project 04<br>
    Project 05<br>
    </div>




项目04
项目05

问题是,然后使用本机
节点.getElementsByCassName()
生成的数组是“活动的”——它会动态更改,然后更改页面。在您的情况下-然后执行
e.className='hidden'
elements
数组被更改并变小-当前元素将被删除,因为它不符合您的搜索条件。您将传递给
getElementsByClassName()
的内容。但您的代码仍然认为存在相同的元素并对其进行迭代。您试图获取未定义的节点,最终会出现错误并导致脚本中断。 为了避免这种情况,您可以按相反的顺序进行迭代:

   for (var i = n-1; i >=0 ; i--) {
     var e = elements[i];
     if ((e.id != divID) && (e.id != xdivID) && (e.id != idParent) && (e.id != idUncle)){
         e.className='hidden';
     }

如果您制作一个JSFIDLE来演示这个问题,会有所帮助。您从哪里扩展getElementsByClassName()?这不是一个标准方法。CSS与
unhidden
hidden
类相关联的是什么?是的,我是从另一篇文章中复制的,当我一次只取消隐藏一个元素时,效果很好。。我正在准备一个简短的jsfiddle…这里有一个指向有趣行为[link]()的链接,我已经尽可能地缩短了html,使其更易于阅读,而不必禁用错误
   for (var i = n-1; i >=0 ; i--) {
     var e = elements[i];
     if ((e.id != divID) && (e.id != xdivID) && (e.id != idParent) && (e.id != idUncle)){
         e.className='hidden';
     }