改进了子乌的无限树

上一篇日志中,俺介绍了子乌写的无限树.非常漂亮的...但是美中不足的是没有保持树的状态的功能,也就是说当页面刷新的时候,所有的子菜单都会重新初始化,这样对用户来说是很不利的(汗,貌似俺也在考虑用户体验了.)
经过俺的琢磨,终于出炉了这个版本,能保持树的状态,当然是俺目前的想法是保持最后一个子菜单的状态就行了.
俺觉得还得加一个功能,就是点击同级别的菜单的时候,其他的菜单应该收缩,嗯,应该也蛮简单的,今天先发布测试版本1.0.1吧. -_-!

废话就不说了
看代码:

[ 可以先修改再运行 ]

hash 部分的注释:
需要注意的时候.俺是把每个节点的ID用_号整合到hash中去的...
如果您觉得看不懂..也可以联系我..有文字表达错误也可以联系我(最近有意识的联系表达中 -_-!)

function che(){ // 得到最终被点击的节点名称
  var last_hash=l_hash;  //获取上一个hash 
  var url=window.location.hash;  //得到当前的hash
  if(last_hash!=""||last_hash!=url){  // 判断上一个展开的节点 如果不是空就折叠
    _urls=url.substring(1,url.length);  //去掉hash中的#号
    _obj=_urls.split("_");  //对hash中的id进行分解 等到具体 的ID值
    for(var i =0; i<_obj.length;i++){  //遍历ID值
      var _uls=$(_obj[i]);
      if(_uls){  //如果ID存在
        _uls.className="clsCollapse";   //设置该节点菜单的样式
        var _s=_uls.parentNode.getElementsByTagName("span");   //得到菜单前面的指示符号(+ or -)的容器
        if(!_s){    //如果不存在 --- 第一次打开
          var _o=document.createElement("span");   //插入一个span
          _s[0].insertBefore(_o,obj);
          }
        _s[0].innerHTML="+";    //设置span上的指示文字
        _uls.style.display="none";    //设置他的样式--隐藏
      }
    }
  }
  if(url!=""){  // 最后一个点击的节点,保持状态.
    urls=url.substring(1,url.length);  //去掉hash中的#号
    obj=urls.split("_");  //对hash中的id进行分解 等到具体 的ID值
    for(var i =0; i<obj.length;i++){  //遍历ID值
      var uls=$(obj[i]);
      if(uls){   //如果ID存在
        uls.className="clsExpand"; //设置该节点菜单的样式
        var s=uls.parentNode.getElementsByTagName("span"); //得到菜单前面的指示符号(+ or -)的容器
        if(!s){  //如果不存在 --- 第一次打开
          var o=document.createElement("span");//插入一个span          s[0].insertBefore(o,obj);
          }
        s[0].innerHTML="-";  //设置span上的指示文字
        uls.style.display="block";  //设置他的样式--隐藏
      }
    }
  }
  var l_hash=url; //设置历史点击历史记录,用作下次加载菜单的时候做参考;
}


当然了,hash部分肯定还有不足的地方,俺第一次用hash. 如果您觉得有错误,或者可以优化的,请记得留下您的“墨宝”哈。。

--------------1-13-------------------
第2版...
这个版本是对上一个版本的的JS进行了小量的优化..第一版的错误找出来了.. 结构中有相同的ID....
另外多写一个哪个判断上一个hash的功能无效...实际上还是对获取hash对树进行排序.
奇怪的是,在IE和FF下居然对2个相同的ID的情况都不报错,还能正常运行JS

[ 可以先修改再运行 ]
这个是新版1.0.2
待加的功能...折叠上一个打开的按钮!
  1. 1.smartweb.cn

    那么麻烦,真接用yahoo ui

  2. 2.飞飞

    用人家的..永远不会进步哈....自己学会了.才是自己的 :)

  3. 3.飞飞

    失败.对ID的编写还是有问题.
    很有可能会重复..

  4. 4.飞飞

    突然想到一个方法...
    用ID..类别的ID.因为类别的ID具有惟一性,那么随便写一个字符+ID的方式这样就是不可能重复的了....
    嗯..应该可以的...嘿嘿..刚刚否定自己.. 灵感就来了..
    继续测试,,

  5. 5.飞飞

    郁闷...功能消失了.原因还不知道呢..明天来测试把...

  6. 6.倩倩

    很复杂的塞!!看不懂!!!

  7. 7.笑漫中原

    第二版的还不如第一版的好呢,整个发生错误了.

  8. 8.飞飞

    ???? 那里错误?麻烦把错误提示给我。。我这里正常的

  9. 9.wein

    谢谢!!!找到了 你的BLOG经营的很好

  10. 10.飞飞

    过奖了。都是朋友帮忙的~
    欢迎常来~

  11. 我来说几句: