使用Javascript隐藏和显示divID-打开新标题时隐藏

使用Javascript隐藏和显示divID-打开新标题时隐藏,javascript,html,Javascript,Html,目前,我可以点击一个标题,然后显示与标题相关的信息。如果选择了另一个标题,则会在上一个打开的标题下方或上方打开该标题,如果再次单击该标题,则会将其隐藏。 我想做的是,如果一个标题已经打开,单击另一个标题时,它会隐藏上一个标题并显示最近单击的标题 我目前使用的javascript如下 <script type="text/javascript"> function unhide(divID) { var item = document.getElementById(divID

目前,我可以点击一个标题,然后显示与标题相关的信息。如果选择了另一个标题,则会在上一个打开的标题下方或上方打开该标题,如果再次单击该标题,则会将其隐藏。
我想做的是,如果一个标题已经打开,单击另一个标题时,它会隐藏上一个标题并显示最近单击的标题

我目前使用的javascript如下

<script type="text/javascript">
 function unhide(divID) {
    var item = document.getElementById(divID);
    if (item) {
        item.className=(item.className=='hidden')?'unhidden':'hidden';
    }
 }

 function hide(divID) {
    var item = document.getElementById(divID);
    if (item == 'element_name') {
        item.className=(item.className=='hidden');
    }
 }

函数取消隐藏(divID){
var item=document.getElementById(divID);
如果(项目){
item.className=(item.className='hidden')?'unhidden':'hidden';
}
}
函数隐藏(divID){
var item=document.getElementById(divID);
如果(项目=='元素名称'){
item.className=(item.className='hidden');
}
}

<>代码> 为什么不考虑使用标签

我希望这就是你希望做的

您可以在说明中看到可用的主题化选项。如果你想改变它的基础CSS

建议1,你可以考虑看看。 为所有标题元素指定一个公共类名,例如
title
,然后使用
document.getElementsByClassName('title')
查找所有标题元素,如果单击的标题元素被隐藏,则在“取消隐藏”单击的标题之前将其全部隐藏

也就是说,您需要修改您编写的两个函数以适应元素中的多个类。您可以通过
element.className='unhidden title'
轻松设置多个类名,但您的代码将非常不灵活。当您试图通过
String#split
方法修改类名列表时,您的代码将很快变得笨拙,并在类中循环查找和删除隐藏或未隐藏的类

建议2 不要使用未隐藏的类。假定您的unhidden类定义如下:

.unhidden {
  display: block;
}
如果您还有内联元素要取消隐藏,因为您需要另一个类,则该类将变得不太有用:

.unhidden-inline {
  display: inline;
}
如果您仅定义:

.hidden {
  display: block;
}
并添加或删除隐藏类以隐藏或显示元素,这样就可以完全避免此问题。但是,您仍然会遇到在一个元素中处理多个类名的问题

建议#3(理想) 使用或处理DOM遍历和操作,将使您的生活更加轻松。在这种情况下,您将不再需要操纵类,只需使用方便的方法直接隐藏和显示元素即可。包括jQuery:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>

假设以下标记:

<ul>
  <li class="title">
    Title 1
    <div class="description">Best. Title. Ever.</div>
  </li>
  <li class="title">
    Title 2
    <div class="description">Second best title</div>
  </li>
  <li class="title">
    Title 3
    <div class="description">Worst. Title. Ever.</div>
  </li>
</ul>
  • 标题1 最好的。标题曾经
  • 标题2 第二名
  • 标题3 最差的标题曾经
以及以下css:

<style type="text/css">
  .description {
    display: none;
  }
</style>

.说明{
显示:无;
}
您可以通过以下方式灵活实现目标:

<script type="text/javascript">
  $('.title').click(function(event){
    currentDescriptionElement = $('.description', this); // this refers to the clicked DOM element in this context
    isHidden = currentDescriptionElement.is(':hidden');

    $('.title .description:visible').hide(); // hide all visible description elements

    if (isHidden)
      currentDescriptionElement.show();
  })
</script>

$('.title')。单击(函数(事件){
currentDescriptionElement=$('.description',this);//这是指在此上下文中单击的DOM元素
isHidden=currentDescriptionElement.is(“:hidden”);
$('.title.description:visible').hide();//隐藏所有可见的描述元素
如果(isHidden)
currentDescriptionElement.show();
})
我希望这有帮助,祝你好运

您可以尝试以下方法:

<script type="text/javascript">
function unhide(divID) {
    var item = document.getElementById(divID);
    if (item) {
       document.getElementById(divID).style.display = 'block';
   }
} 
function hide(divID) {
   var item = document.getElementById(divID);
   if (item) {
      document.getElementById(divID).style.display = 'none';
  }
}   
</script>

函数取消隐藏(divID){
var item=document.getElementById(divID);
如果(项目){
document.getElementById(divID).style.display='block';
}
} 
函数隐藏(divID){
var item=document.getElementById(divID);
如果(项目){
document.getElementById(divID).style.display='none';
}
}   

您必须根据您的呼叫传递divid

您需要配置另一个函数,比如hideall(),在调用unhide()之前需要调用该函数,首先关闭所有打开的,然后仅取消隐藏单击的内容。您不需要隐藏(),只需要隐藏()

非常感谢您的帮助。