所以,我有一个带有无序列表的nav元素,我用它作为标签。有三个,你点击一个,它在网站上显示一个div。但是,我想要它,这样如果你点击另一个,它将隐藏当前显示的那个,然后显示你点击的那个。但我似乎无法做对。这是我的功能:
function display(action, id)
{
if (action == 'show')
{
document.getElementById("page"+id).style.display = "block";
document.getElementById("link"+id).href= "javascript:display('hide', "+id+")";
}
if (action == 'hide')
{
document.getElementById("page"+id).style.display = "none";
document.getElementById("link"+id).href= "javascript:display('show', "+id+")";
}
}
</script>
我尝试做类似
的事情document.getElementById(“page”+ id + 1).style.display =“none”;
我认为它会将显示样式更改为没有id比当前ID高一个的div,而是它什么都不做。我会添加什么来隐藏所有当前打开的标签?
答案 0 :(得分:3)
您也可以将DIV
名称存储在Hidden Input
<body>
<script language="javascript">
function MyFunction(divName){
//hidden val
var hiddenVal = document.getElementById("tempDivName");
//hide old
if(hiddenVal.Value != undefined){
var oldDiv = document.getElementById(hiddenVal.Value);
oldDiv.style.display = 'none';
}
//show div
var tempDiv = document.getElementById(divName);
tempDiv.style.display = 'block';
//save div ID
hiddenVal.Value = document.getElementById(divName).getAttribute("id");
}
</script>
<input id="tempDivName" type="hidden" />
<ul>
<li><a href="#" OnClick="MyFunction('myDiv1');">Show myDiv1</a></li>
<li><a href="#" OnClick="MyFunction('myDiv2');">Show myDiv2</a></li>
<li><a href="#" OnClick="MyFunction('myDiv3');">Show myDiv3</a></li>
</ul>
<br/>
<div id="myDiv1" style="background-color:red; height:200px; width:200px; display:none">
myDiv1
</div>
<div id="myDiv2" style="background-color:yellow; height:200px; width:200px; display:none">
myDiv2
</div>
<div id="myDiv3" style="background-color:green; height:200px; width:200px; display:none">
myDiv3
</div>
</body>
答案 1 :(得分:1)
您可以通过利用css类来改进此代码的结构。首先,使用getElementsByClassName
收集所有导航项。然后为它们附加指向您的切换代码的点击处理程序。
在togglecode中,为显示的元素添加一个类,并将其删除为旧元素。我对你的html结构做了假设,但这应该很容易适应。 &lt;不支持classList IE7,但如果需要支持,你可以substitute in a regex来处理这个问题。
<div class="nav show"><span>A</span></div>
<div class="nav"><span>B</span></div>
<div class="nav"><span>C</span></div>
<script>
//get nav items
var navElems = document.getElementsByClassName('nav');
//attach click handler to each
for (var i = 0; i < navElems.length; i++) {
navElems[i].onclick = toggleVisible;
}
//handle click events
function toggleVisible() {
//hide currently shown item
document.getElementsByClassName('show')[0].classList.remove('show');
//show clicked item
this.classList.add('show');
}
</script>