function test(obj)
{
obj = obj.nextSibling;
isDisplay = "";
if(obj.id !="two")
{
if(obj.style.display == "none")
{
isDisplay = "block";
}
else
{
isDisplay = "none";
}
}
while(obj.id !="two"){
obj.style.display = isDisplay;
obj = obj.nextSibling;
}
}
在你的基础上改了下下。
{
obj = obj.nextSibling;
isDisplay = "";
if(obj.id !="two")
{
if(obj.style.display == "none")
{
isDisplay = "block";
}
else
{
isDisplay = "none";
}
}
while(obj.id !="two"){
obj.style.display = isDisplay;
obj = obj.nextSibling;
}
}
在你的基础上改了下下。
<div>第二层</div>
<div>第三层</div>
<script type="text/javascript">
/*<![CDATA[*/var div_a = document.getElementsByTagName('div');for(var i=0, j=div_a.length; i<j; i++)
{
var div_e = div_a[i];
div_e.ext_index = i;
div_e.ext_length = j;
div_e.is_hidden = false;
div_e.onclick = test;
div_e.div_a = div_a;
}function test(evt)
{
this.is_hidden = this.is_hidden?false:true;
for(var i=this.ext_index+1; i<this.ext_length; i++)
{
if(this.is_hidden)
{
this.div_a[i].style.display = 'none';
}
else
{
this.div_a[i].style.display = 'block';
}
}
}/*]]>*/
</script>
<html>
<head>
<style type="text/css">
div { width:400px; height:25px; border:1px solid #000000; cursor:pointer;}
</style>
</head>
<body>
<div onclick=a(this)>第一层</div>
<div onclick=a(this)>第二层</div>
<div onclick=a(this)>第三层</div>
<div id="two">根目录二</div>
<script>
function a(x){
x.nextSibling.style.display=="none"?x.nextSibling.style.display="block":x.nextSibling.style.display="none";
}
</script>
</body>
</html>
呵呵 做出来了 只是最后一个“根目录二” 要不要也隐藏 如果不要的话 加个if语句就可以了
{
var disp='';
while ( obj.nextSibling!=document.getElementById('two'))
{
obj=obj.nextSibling;
if (obj.nodeType!=1)
{
obj=obj.nextSibling;
continue;
}
if (!disp)
disp=obj.style.display=='none'?'block':'none';
obj.style.display=disp;
}
}
<html>
<head>
<style type="text/css">
div { width:400px; height:25px; border:1px solid #000000; cursor:pointer;}
</style>
<script>
function test(obj)
{
if(typeof obj._toggle == 'undefined')obj._toggle = false;
o = obj;
obj = findNext(obj);
while(obj != null && typeof obj.style != 'undefined'){
if(o._toggle) obj.style.display = 'block';
else obj.style.display = 'none';
obj = findNext(obj);
}
o._toggle = !o._toggle;
}
function findNext(obj){
while(obj != null && obj.nextSibling != null){
obj = obj.nextSibling;
if(obj.tagName == 'DIV' && obj.id != 'two')return obj;//找到下一个div时返回
}
return false;
}
</script>
</head>
<body>
<div onclick="test(this)">第一层</div>
<div onclick="test(this)">第二层</div>
<div onclick="test(this)">第三层</div>
<div id="two">根目录二</div>
</body>
</html>
<html>
<head>
<style type="text/css">
div { width:400px; height:25px; border:1px solid #000000; cursor:pointer;}
</style>
</head>
<body>
<div>第二层</div>
<div>第一层</div>
<div>第三层</div>
<div id="two">根目录二</div>
<script>
function doit(x){
switch(x){
case a :
if (arrayDiv[b].style.display!="none"){
arrayDiv[b].style.display="none";
arrayDiv[c].style.display="none";
}
else{
arrayDiv[b].style.display="";
arrayDiv[c].style.display="";
}
break;
case b :
if (arrayDiv[c].style.display!="none"){
arrayDiv[c].style.display="none";
}
else{
arrayDiv[c].style.display="";
}
break;
default:
break;
}
}
var arrayDiv = document.getElementsByTagName("div");
for (i=0;i<arrayDiv.length;i++){
switch(arrayDiv[i].innerHTML)
{
case "第一层" :
var a = i;
arrayDiv[a].onclick = function(){doit(a)}
break;
case "第二层" :
var b = i;
arrayDiv[b].onclick = function(){doit(b)}
break;
case "第三层" :
var c = i;
break;
default:
break;
}
}
</script>
</body>
</html>我这样写的好处是,DIV交换位置都没关系,如下排列都可实现要求。<div>第二层</div>
<div>第一层</div>
<div>第三层</div>
<html>
<head>
<style type="text/css">
div { width:400px; height:25px; border:1px solid #000000; cursor:pointer;}
</style>
</head>
<body>
<div onclick=a(this)>第一层</div>
<div onclick=a(this)>第二层</div>
<div onclick=a(this)>第三层</div>
<div id="two">根目录二</div>
<script>
function a(x){
while (x.nextSibling != document.getElementById("two")) {
x.nextSibling.style.display = x.nextSibling.style.display == "none" ? "block" : "none";
x=x.nextSibling;
}
}
</script>
</body>
</html>
<head>
<style type="text/css">
div {
width:400px;
height:25px;
border:1px solid #000000;
cursor:pointer;
}
</style>
<script type="text/javascript">
function handleDivClick(e){
var evt=e||window.event;
var srcEl=evt.target||evt.srcElement;
var oNextEl=srcEl.nextSibling;
var isShow=!srcEl.isShow;
var oDivRoot=(function(){
var aDivs=document.getElementsByTagName("div");
return aDivs[aDivs.length-1];
})(); while(oNextEl!=oDivRoot){
if(oNextEl.tagName=="DIV"){
oNextEl.isShow=isShow;
oNextEl.style.display=isShow?"block":"none";
}
oNextEl=oNextEl.nextSibling;
}
srcEl.isShow=isShow;
}window.onload=function(){
var aDivs=document.getElementsByTagName("div");
var i,nLen=aDivs.length-1;
for(i=0;i<nLen;i++){
aDivs[i].isShow=true;
aDivs[i].onclick=handleDivClick;
}
}
</script>
</head>
<body>
<div onclick="test(this)">第一层</div>
<div onclick="test(this)">第二层</div>
<div onclick="test(this)">第三层</div>
<div id="two">根目录二</div>
</body>
</html>
var state="";
while(obj=obj.nextSibling){
if(obj.id=="two")return;//点了第3层
if(obj.nodeType==3)continue;//兼容firefox
if(state==""){//获取相邻下一个节点的状态,根据这个节点的状态获取其他下个节点的状态
state=obj.style.display=="none"?"block":"none";
}
obj.style.display=state;
}
}
基本思想是按下的那一层底下的所有层只需和点击按钮的第2层的"none"或"block"状态一样即可
例如:按下第2层时候 第3层的显示状态变下 4,5,6,7,8等等只需把状态和3层一样即可
具体代码如下:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<html>
<head>
<style type="text/css">
div { width:400px; height:25px; border:1px solid #000000; cursor:pointer;}
</style>
</head>
<body>
<div onclick=a(this)>第一层</div>
<div onclick=a(this)>第二层</div>
<div onclick=a(this)>第三层</div>
<div onclick=a(this)>第4层</div>
<div onclick=a(this)>第5层</div>
<div onclick=a(this)>第6层</div>
<div id="two">根目录二</div>
<script>
function a(x){
var b;
while (x.nextSibling.id !="two") {
x=x.nextSibling;
if(!b)//注意(!"none") 为假
b=x.style.display=='none'?'block':'none';
x.style.display=b;
}
}
</script>
</body>
</html>
div { width:400px; height:25px; border:1px solid #000000; cursor:pointer;}
</style><title></title>
<script type="text/javascript">
$(function(){
$("div:eq(1)").click(function(){
$("div:eq(2)").hide();
});
$("div:eq(0)").toggle(function(){
$("div:eq(1)").hide();
},
function(){
$("div:eq(1)").show();
$("div:eq(2)").show();
})
});
</script>
</head>
<body >
<div>第一层</div>
<div>第二层</div>
<div>第三层</div>
<div>根目录二</div>
</body>jquery版
<head>
<style type="text/css">
div { width:400px; height:25px; border:1px solid #000000; cursor:pointer;}
</style>
<script>
var a = true
function c(j)
{
for(var i = 0;i < document.body.children.length;i++)
{
if(a)
{
if(i >= j)document.body.children(i).style.display = "none";
else document.body.children(i).style.display = "";
}
else document.body.children(i).style.display = "";
}
a = !a;
}
</script>
</head>
<body>
<div onclick="c(1)">第一层</div>
<div onclick="c(2)">第二层</div>
<div onclick="c(3)">第三层</div>
<div id="two">根目录二</div>
</body>
</html>
<head>
<style type="text/css">
div { width:400px; height:25px; border:1px solid #000000; cursor:pointer;}
</style>
<script>
function test(obj)
{
obj = obj.nextSibling;
while(obj.id!="two"){
if(obj.style.display == "none"){
obj.style.display = "block";
} else if(obj.id!="two"){
obj.style.display = "none";
obj = obj.nextSibling;
}else {
obj.style.display = "block";
}
obj = obj.nextSibling;
}
}
</script>
</head>
<body>
(1)点击 "第二层" 则第三层隐藏,接着点击 "第一层",则"第二层"
和"第三层",均为隐藏,再接着点击"第一层","第二层","第三层"
均为显示,再接着点击"第二层","第三层"为隐藏状态.
下面是我当时做的,功能实现了部分。 <div onclick="test(this)">第一层</div>
<div onclick="test(this)">第二层</div>
<div onclick="test(this)">第三层</div>
<div id="two">根目录二</div>
</body>
</html>ps:面试公司要求多长时间做出来?从23:25到发帖时间截止!才做出来!
<html>
<head>
<style type="text/css">
div { width:400px; height:25px; border:1px solid #000000; cursor:pointer;}
</style>
<script>
function test(obj)
{
var displayname;
obj=obj.nextSibling;
if(obj.id!="two"){
if(obj.style.display=="none"){
obj.style.display="block";
}else{
obj.style.display="none";
}
displayname=obj.style.display;
}
while(obj.nextSibling.id!="two"){
obj=obj.nextSibling;
obj.style.display=displayname;
}
}
</script>
</head>
<body>
<div onclick="test(this)">第一层</div>
<div onclick="test(this)">第二层</div>
<div onclick="test(this)">第三层</div>
<div onclick="test(this)">第四层</div>
<div onclick="test(this)">第五层</div>
<div onclick="test(this)">第六层</div>
<div onclick="test(this)">第七层</div>
<div id="two">根目录二</div>
</body>
</html>
恩.我先说我的javascript极烂 function test(obj){
obj=obj.nextSibling;
if(obj.style.display == "none")
{
obj.style.display = "block";
obj.nextSibling.style.display = "block";
}
else
{
obj.style.display = "none";
obj.nextSibling.style.display = "none";
}
}
<head>
<style type="text/css">
div { width:400px; height:25px; border:1px solid #000000; cursor:pointer;}
</style>
</head>
<body>
<div>第二层</div>
<div>第一层</div>
<div>第三层</div>
<div id="two">根目录二</div>
<script>
function doit(x){
switch(x){
case a :
if (arrayDiv[b].style.display!="none"){
arrayDiv[b].style.display="none";
arrayDiv[c].style.display="none";
}
else{
arrayDiv[b].style.display="";
arrayDiv[c].style.display="";
}
break;
case b :
if (arrayDiv[c].style.display!="none"){
arrayDiv[c].style.display="none";
}
else{
arrayDiv[c].style.display="";
}
break;
default:
break;
}
}
var arrayDiv = document.getElementsByTagName("div");
for (i=0;i<arrayDiv.length;i++){
switch(arrayDiv[i].innerHTML)
{
case "第一层" :
var a = i;
arrayDiv[a].onclick = function(){doit(a)}
break;
case "第二层" :
var b = i;
arrayDiv[b].onclick = function(){doit(b)}
break;
case "第三层" :
var c = i;
break;
default:
break;
}
}
</script>
</body>
</html>10楼代码经本人测试,正确通过,而且颠倒DIV排列次序都没有问题
<head>
<style type="text/css">
div { width:400px; height:25px; border:1px solid #000000; cursor:pointer;}
</style>
</head>
<body>
<div>第二层</div>
<div>第一层</div>
<div>第三层</div>
<div id="two">根目录二</div>
<script>
function doit(x){
switch(x){
case a :
if (arrayDiv[b].style.display!="none"){
arrayDiv[b].style.display="none";
arrayDiv[c].style.display="none";
}
else{
arrayDiv[b].style.display="";
arrayDiv[c].style.display="";
}
break;
case b :
if (arrayDiv[c].style.display!="none"){
arrayDiv[c].style.display="none";
}
else{
arrayDiv[c].style.display="";
}
break;
default:
break;
}
}
var arrayDiv = document.getElementsByTagName("div");
for (i=0;i<arrayDiv.length;i++){
switch(arrayDiv[i].innerHTML)
{
case "第一层" :
var a = i;
arrayDiv[a].onclick = function(){doit(a)}
break;
case "第二层" :
var b = i;
arrayDiv[b].onclick = function(){doit(b)}
break;
case "第三层" :
var c = i;
break;
default:
break;
}
}
</script>
</body>
</html>10楼代码经本人测试,正确通过,而且颠倒DIV排列次序都没有问题
试想一下,如果你进了这样的公司,公司会不会在某些问题上故意刁难你呢~当然,纯粹作为一个技术探讨来说,这样的限制还可能有点意思~
这个技术可以用于一个无限分类
中点击上一层隐藏下一层,而不需要知道第一层的id号
同样能实现有id一样的功能,
何乐而不为呢?
楼上的太过于自卑了吧,哈哈
这个技术可以用于一个无限分类
中点击上一层隐藏下一层,而不需要知道第一层的id号
同样能实现有id一样的功能,
何乐而不为呢?
楼上的太过于自卑了吧,哈哈