zoukankan      html  css  js  c++  java
  • js实现无限级树形导航列表

    <html>
    <head>
    <title>js实现的无限级树形下拉导航列表 </title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style type="text/css">
        *{ margin:0; padding:0;    list-style:none;}
        body { margin:20px;}
        h2 { font-family:"黑体"; font-size:24px; text-align:center; line-height:32px;}
        h5 { font-size:12px; text-align:center; font-weight:normal; color:#666; line-height:28px;}
        #nav a { text-decoration:underline;color:#06c; font-size:14px; line-height:24px;}
        #nav ul{ margin-bottom:5px;}
        #nav strong{ color:#696;}
        #nav.dyn li ul{ display:none;}
        #nav.dyn li ul.show{ display:block;}
        #nav.dyn li{ padding-left:15px;}
        #nav.dyn li.parent{    background:url(user_23.gif) 5px 10px no-repeat;}
        #nav.dyn li.open{ background:url(user_23.gif) 5px -34px no-repeat;}
        </style>
    </head>
    <body>
    <script type="text/javascript">
        DOMhelp = {
            debugWindowId: 'DOMhelpdebug',
            init: function () {
                if (!document.getElementById || !document.createTextNode) { return; }
            },
            lastSibling: function (node) {
                var tempObj = node.parentNode.lastChild;
                while (tempObj.nodeType != 1 && tempObj.previousSibling != null) {
                    tempObj = tempObj.previousSibling;
                }
                return (tempObj.nodeType == 1) ? tempObj : false;
            },
            firstSibling: function (node) {
                var tempObj = node.parentNode.firstChild;
                while (tempObj.nodeType != 1 && tempObj.nextSibling != null) {
                    tempObj = tempObj.nextSibling;
                }
                return (tempObj.nodeType == 1) ? tempObj : false;
            },
            getText: function (node) {
                if (!node.hasChildNodes()) { return false; }
                var reg = /^s+$/;
                var tempObj = node.firstChild;
                while (tempObj.nodeType != 3 && tempObj.nextSibling != null || reg.test(tempObj.nodeValue)) {
                    tempObj = tempObj.nextSibling;
                }
                return tempObj.nodeType == 3 ? tempObj.nodeValue : false;
            },
            setText: function (node, txt) {
                if (!node.hasChildNodes()) { return false; }
                var reg = /^s+$/;
                var tempObj = node.firstChild;
                while (tempObj.nodeType != 3 && tempObj.nextSibling != null || reg.test(tempObj.nodeValue)) {
                    tempObj = tempObj.nextSibling;
                }
                if (tempObj.nodeType == 3) { tempObj.nodeValue = txt } else { return false; }
            },
            createLink: function (to, txt) {
                var tempObj = document.createElement('a');
                tempObj.appendChild(document.createTextNode(txt));
                tempObj.setAttribute('href', to);
                return tempObj;
            },
            createTextElm: function (elm, txt) {
                var tempObj = document.createElement(elm);
                tempObj.appendChild(document.createTextNode(txt));
                return tempObj;
            },
            closestSibling: function (node, direction) {
                var tempObj;
                if (direction == -1 && node.previousSibling != null) {
                    tempObj = node.previousSibling;
                    while (tempObj.nodeType != 1 && tempObj.previousSibling != null) {
                        tempObj = tempObj.previousSibling;
                    }
                } else if (direction == 1 && node.nextSibling != null) {
                    tempObj = node.nextSibling;
                    while (tempObj.nodeType != 1 && tempObj.nextSibling != null) {
                        tempObj = tempObj.nextSibling;
                    }
                }
                return tempObj.nodeType == 1 ? tempObj : false;
            },
            initDebug: function () {
                if (DOMhelp.debug) { DOMhelp.stopDebug(); }
                DOMhelp.debug = document.createElement('div');
                DOMhelp.debug.setAttribute('id', DOMhelp.debugWindowId);
                document.body.insertBefore(DOMhelp.debug, document.body.firstChild);
            },
            setDebug: function (bug) {
                if (!DOMhelp.debug) { DOMhelp.initDebug(); }
                DOMhelp.debug.innerHTML += bug + ' ';
            },
            stopDebug: function () {
                if (DOMhelp.debug) {
                    DOMhelp.debug.parentNode.removeChild(DOMhelp.debug);
                    DOMhelp.debug = null;
                }
            },
            getKey: function (e) {
                if (window.event) {
                    var key = window.event.keyCode;
                } else if (e) {
                    var key = e.keyCode;
                }
                return key;
            },
            /* helper methods */
            getTarget: function (e) {
                var target = window.event ? window.event.srcElement : e ? e.target : null;
                if (!target) { return false; }
                while (target.nodeType != 1 && target.nodeName.toLowerCase() != 'body') {
                    target = target.parentNode;
                }
                return target;
            },
            stopBubble: function (e) {
                if (window.event && window.event.cancelBubble) {
                    window.event.cancelBubble = true;
                }
                if (e && e.stopPropagation) {
                    e.stopPropagation();
                }
            },
            stopDefault: function (e) {
                if (window.event && window.event.returnValue) {
                    window.event.returnValue = false;
                }
                if (e && e.preventDefault) {
                    e.preventDefault();
                }
            },
            cancelClick: function (e) {
                if (window.event) {
                    window.event.cancelBubble = true;
                    window.event.returnValue = false;
                }
                if (e && e.stopPropagation && e.preventDefault) {
                    e.stopPropagation();
                    e.preventDefault();
                }
            },
            addEvent: function (elm, evType, fn, useCapture) {
                if (elm.addEventListener) {
                    elm.addEventListener(evType, fn, useCapture);
                    return true;
                } else if (elm.attachEvent) {
                    var r = elm.attachEvent('on' + evType, fn);
                    return r;
                } else {
                    elm['on' + evType] = fn;
                }
            },
            cssjs: function (a, o, c1, c2) {
                switch (a) {
                    case 'swap':
                        o.className = !DOMhelp.cssjs('check', o, c1) ? o.className.replace(c2, c1) : o.className.replace(c1, c2);
                        break;
                    case 'add':
                        if (!DOMhelp.cssjs('check', o, c1)) { o.className += o.className ? ' ' + c1 : c1; }
                        break;
                    case 'remove':
                        var rep = o.className.match(' ' + c1) ? ' ' + c1 : c1;
                        o.className = o.className.replace(rep, '');
                        break;
                    case 'check':
                        var found = false;
                        var temparray = o.className.split(' ');
                        for (var i = 0; i < temparray.length; i++) {
                            if (temparray[i] == c1) { found = true; }
                        }
                        return found;
                        break;
                }
            },
            safariClickFix: function () {
                return false;
            }
        }
        DOMhelp.addEvent(window, 'load', DOMhelp.init, false);
    </script>
    <script type="text/javascript">
    <!--
        sn = {
            dynamicClass: 'dyn',
            showClass: 'show',
            parentClass: 'parent',
            openClass: 'open',
            navID: 'nav',
            init: function () {
                var triggerLink;
                if (!document.getElementById || !document.createTextNode) { return; }
                var nav = document.getElementById(sn.navID);
                if (!nav) { return; }
                DOMhelp.cssjs('add', nav, sn.dynamicClass);
                var nested = nav.getElementsByTagName('ul');
                for (var i = 0; i < nested.length; i++) {
                    triggerLink = nested[i].parentNode.getElementsByTagName('a')[0];
                    DOMhelp.cssjs('add', triggerLink.parentNode, sn.parentClass);
                    DOMhelp.addEvent(triggerLink, 'click', sn.changeSection, false);
                    triggerLink.onclick = DOMhelp.safariClickFix;
                    if (nested[i].parentNode.getElementsByTagName('strong').length > 0) {
                        DOMhelp.cssjs('add', triggerLink.parentNode, sn.openClass);
                        DOMhelp.cssjs('add', nested[i], sn.showClass);
                    }
                }
            },
            changeSection: function (e) {
                var t = DOMhelp.getTarget(e);
                var firstList = t.parentNode.getElementsByTagName('ul')[0];
                if (DOMhelp.cssjs('check', firstList, sn.showClass)) {
                    DOMhelp.cssjs('remove', firstList, sn.showClass)
                    DOMhelp.cssjs('swap', t.parentNode, sn.openClass, sn.parentClass);
                } else {
                    DOMhelp.cssjs('add', firstList, sn.showClass)
                    DOMhelp.cssjs('swap', t.parentNode, sn.openClass, sn.parentClass);
                }
                DOMhelp.cancelClick(e);
            }
        }
        DOMhelp.addEvent(window, 'load', sn.init, false);
    -->
    </script>
    <h2>js实现无限级树形导航列表</h2>
    <ul id="nav">
       
        <li><a href="#">产品目录</a>
            <ul>
                <li><a href="#">大类别一</a>
                    <ul>
                        <li><a href="#">小类别一</a>
                            <ul>
                                <li><a href="#">次类别一</a></li>
                                <li><a href="#">次类别二</a></li>
                            </ul>
                        </li>
                        <li><a href="#">小类别二</a></li>
                    </ul>
                </li>
                <li><a href="#">大类别二</a></li>
                <li><a href="#">大类别三</a>
                    <ul>
                        <li><a href="#">小类别一</a></li>
                        <li><a href="#">小类别二</a></li>
                    </ul>
                </li>
            </ul>
        </li>
        <li><a href="#">服务</a>
            <ul>
                <li><a href="#">大类别一</a>
                   <ul>
                        <li><a href="#">小类别一</a></li>
                        <li><a href="#">小类别二</a></li>
                    </ul>
                </li>
                <li><a href="#">大类别二</a>
                     <ul>
                        <li><a href="#">小类别一</a></li>
                        <li><a href="#">小类别二</a></li>
                    </ul>
                </li>
                <li><a href="#">大类别三</a>
                     <ul>
                        <li><a href="#">小类别一</a></li>
                        <li><a href="#">小类别二</a></li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
    </body>
    </html> 

  • 相关阅读:
    搜狗输入法弹出广告
    PHP uploadify io error错误如何解决?
    读写生信流程必备的 Perl 语法
    Illumina Sequence Identifiers 序列标识符 index详解
    真核生物基因结构 & mRNA结构
    主成分分析(PCA)原理及R语言实现 | 降维dimension reduction | Principal component analysis
    CRISPR基因编辑
    表观遗传学
    Shiny+SQLite打造轻量级网页应用
    探索gff/gtf格式
  • 原文地址:https://www.cnblogs.com/lizihong/p/4012889.html
Copyright © 2011-2022 走看看