最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

js一般方法改写成面向对象方法的无限级折叠菜单示例代码_javascript技巧

来源:动视网 责编:小采 时间:2020-11-27 21:11:41
文档

js一般方法改写成面向对象方法的无限级折叠菜单示例代码_javascript技巧

js一般方法改写成面向对象方法的无限级折叠菜单示例代码_javascript技巧:本例是应用别人的例子,原来那位老兄是用一般方法写成的无限级折叠菜单,在此先感谢他!后来我就通过了一些简化修改,将原来的例子改成了面向对象的方式,实例中的展开与闭合的小图标可以自己重新添加,从而更好的查看效果。 代码如下: 很实用的JS+CS
推荐度:
导读js一般方法改写成面向对象方法的无限级折叠菜单示例代码_javascript技巧:本例是应用别人的例子,原来那位老兄是用一般方法写成的无限级折叠菜单,在此先感谢他!后来我就通过了一些简化修改,将原来的例子改成了面向对象的方式,实例中的展开与闭合的小图标可以自己重新添加,从而更好的查看效果。 代码如下: 很实用的JS+CS


本例是应用别人的例子,原来那位老兄是用一般方法写成的无限级折叠菜单,在此先感谢他!后来我就通过了一些简化修改,将原来的例子改成了面向对象的方式,实例中的展开与闭合的小图标可以自己重新添加,从而更好的查看效果。
代码如下:



很实用的JS+CSS多级树形展开菜单
















































  • /**一般JS方法
    function addEvent(el,name,fn){//绑定事件
    if(el.addEventListener) return el.addEventListener(name,fn,false);
    return el.attachEvent('on'+name,fn);
    }
    function nextnode(node){//寻找下一个兄弟并剔除空的文本节点
    if(!node)return ;
    if(node.nodeType == 1)
    return node;
    if(node.nextSibling)
    return nextnode(node.nextSibling);
    }
    function prevnode(node){//寻找上一个兄弟并剔除空的文本节点
    if(!node)return ;
    if(node.nodeType == 1)
    return node;
    if(node.previousSibling)
    return prevnode(node.previousSibling);
    }
    addEvent(document.getElementById('root'),'click',function(e){//绑定点击事件,使用root根元素代理
    e = e||window.event;
    var target = e.target||e.srcElement;
    var tp = nextnode(target.parentNode.nextSibling);
    switch(target.nodeName){
    case 'A'://点击A标签展开和收缩树形目录,并改变其样式
    if(tp&&tp.nodeName == 'UL'){
    if(tp.style.display != 'block' ){
    tp.style.display = 'block';
    prevnode(target.parentNode.previousSibling).className = 'ren'
    }else{
    tp.style.display = 'none';
    prevnode(target.parentNode.previousSibling).className = 'add'
    }
    }
    break;
    case 'SPAN'://点击图标只展开或者收缩
    var ap = nextnode(nextnode(target.nextSibling).nextSibling);
    if(ap.style.display != 'block' ){
    ap.style.display = 'block';
    target.className = 'ren'
    }else{
    ap.style.display = 'none';
    target.className = 'add'
    }
    break;
    }
    });
    window.onload = function(){//页面加载时给有孩子结点的元素动态添加图标
    var labels = document.getElementById('root').getElementsByTagName('label');
    for(var i=0;ivar span = document.createElement('span');
    span.style.cssText ='display:inline-block;height:18px;vertical-align:middle;width:16px;cursor:pointer;';
    span.innerHTML = ' '
    span.className = 'add';
    if(nextnode(labels[i].nextSibling)&&nextnode(labels[i].nextSibling).nodeName == 'UL')
    labels[i].parentNode.insertBefore(span,labels[i]);
    else
    labels[i].className = 'rem'
    }
    }
    **/
    //面向对象方法
    var Tree = function(o){
    this.root = document.getElementById(o);
    this.labels = this.root.getElementsByTagName('label');
    var that = this;
    this.int();
    Tree.prototype.addEvent(this.root,'click',function(e){that.treeshow(e)});
    }
    Tree.prototype = {
    int:function(){//初始化页面,加载时给有孩子结点的元素动态添加图标
    for(var i=0;ivar span = document.createElement('span');
    span.style.cssText ='display:inline-block;height:18px;vertical-align:middle;width:16px;cursor:pointer;';
    span.innerHTML = ' '
    span.className = 'add';
    if(this.nextnode(this.labels[i].nextSibling)&&this.nextnode(this.labels[i].nextSibling).nodeName == 'UL')
    this.labels[i].parentNode.insertBefore(span,this.labels[i]);
    else
    this.labels[i].className = 'rem'
    }
    },
    treeshow:function(e){
    e = e||window.event;
    var target = e.target||e.srcElement;
    var tp = this.nextnode(target.parentNode.nextSibling);
    switch(target.nodeName){
    case 'A'://点击A标签展开和收缩树形目录,并改变其样式
    if(tp&&tp.nodeName == 'UL'){
    if(tp.style.display != 'block' ){
    tp.style.display = 'block';
    this.prevnode(target.parentNode.previousSibling).className = 'ren'
    }else{
    tp.style.display = 'none';
    this.prevnode(target.parentNode.previousSibling).className = 'add'
    }
    }
    break;
    case 'SPAN'://点击图标只展开或者收缩
    var ap = this.nextnode(this.nextnode(target.nextSibling).nextSibling);
    if(ap.style.display != 'block' ){
    ap.style.display = 'block';
    target.className = 'ren'
    }else{
    ap.style.display = 'none';
    target.className = 'add'
    }
    break;
    }
    },
    addEvent:function(el,name,fn){//绑定事件
    if(el.addEventListener) return el.addEventListener(name,fn,false);
    return el.attachEvent('on'+name,fn);
    },
    nextnode:function(node){//寻找下一个兄弟并剔除空的文本节点
    if(!node)return ;
    if(node.nodeType == 1)
    return node;
    if(node.nextSibling)
    return this.nextnode(node.nextSibling);
    },
    prevnode:function(node){//寻找上一个兄弟并剔除空的文本节点
    if(!node)return ;
    if(node.nodeType == 1)
    return node;
    if(node.previousSibling)
    return prevnode(node.previousSibling);
    }
    }
    tree = new Tree("root");//实例化应用



    文档

    js一般方法改写成面向对象方法的无限级折叠菜单示例代码_javascript技巧

    js一般方法改写成面向对象方法的无限级折叠菜单示例代码_javascript技巧:本例是应用别人的例子,原来那位老兄是用一般方法写成的无限级折叠菜单,在此先感谢他!后来我就通过了一些简化修改,将原来的例子改成了面向对象的方式,实例中的展开与闭合的小图标可以自己重新添加,从而更好的查看效果。 代码如下: 很实用的JS+CS
    推荐度:
    标签: js 示例 的折叠
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top