🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 知识点 > 1、左侧显示分类树,右侧显示对应栏目的内容(插件jsTree的用法) 2、默认全部分类展开 3、单击展开或折叠分类 4、点击分类,只刷新右侧(右侧框架) ## 难点 > 难点:单击分类菜单,全部显示或者隐藏 官网:https://www.jstree.com/ ## 扩展知识 > 1、Atom保存自动格式化插件:atom-beautify 2、Javascript的console.log()用法 ## 插件jsTree的用法 ### 一、点击左侧分类,右侧显示分类相关的内容 #### 1、html(index.html) ~~~ <div class="wrapper wrapper-content animated fadeInRight"> <div class="row"> <div class="col-sm-3"> <div class="ibox float-e-margins"> <div class="ibox-title"> <h5>分类</h5> </div> <div class="ibox-content"> <div id="jstree"> <ul> <li class="jstree-open">全部展开、折叠 <ul> {volist name="categoryList" id="vo"} <li class="jstree-open">{$vo.catname} <ul> {volist name="vo.son" id="voson"} <li data-jstree='{"type":"html"}'> <a href="{:url('content',['id'=>$voson.id])}">{$voson.catname}</a> </li> {/volist} </ul> </li> {/volist} </ul> </li> </ul> </div> </div> </div> </div> <div class="col-sm-9"> <iframe id="iframe_content" src="{:url('content')}" style="width:100%; height:100%" frameborder="0" scrolling="atuo"></iframe> </div> </div> </div> ~~~ #### 2、js ~~~ <script> $(document).ready(function() { $("#jstree") .on('changed.jstree', function(e, data) { var url = $('#' + data.node.id).children('a').attr('href'); if (url != '#') { $('#iframe_content').attr('src', url); } }) .on('select_node.jstree', function(e, data) { if (data.node.id == 'j1_1') { if (data.instance.is_open(data.instance.get_next_dom(data.node))) { var i, j; for (i = 0, j = data.node.children.length; i < j; i++) { data.instance.close_node(data.node.children[i]); } } else { data.instance.open_all(data.node); } } else { data.instance.toggle_node(data.node); } }) .jstree({ "core": { "check_callback": true, "dblclick_toggle": false }, "plugins": ["types", "dnd"], "types": { "default": { "icon": "fa fa-folder" }, "html": { "icon": "fa fa-file-code-o" }, "svg": { "icon": "fa fa-file-picture-o" }, "css": { "icon": "fa fa-file-code-o" }, "img": { "icon": "fa fa-file-image-o" }, "js": { "icon": "fa fa-file-text-o" } } }); }); </script> ~~~ #### 3、php ~~~ <?php namespace app\admin\controller; use think\Controller; use think\Db; use app\admin\model\Menu; class Content extends Controller{ public function index() { //获取分类树 $categoryArray = Db::name('category')->order('listorder')->select(); $categoryList = Menu::tree($categoryArray); $this->assign('categoryList',$categoryList); return view(); } public function content($id = 1) { $this->assign('id',$id); return view(); } } ~~~ #### 4、html(content.html) ~~~ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>H+ 后台主题UI框架 - 树形视图</title> <meta name="keywords" content="H+后台主题,后台bootstrap框架,会员中心主题,后台HTML,响应式后台"> <meta name="description" content="H+是一个完全响应式,基于Bootstrap3最新版本开发的扁平化主题,她采用了主流的左右两栏式布局,使用了Html5+CSS3等现代技术"> <link rel="shortcut icon" href="favicon.ico"> <link href="__ADMIN__/css/bootstrap.min14ed.css?v=3.3.6" rel="stylesheet"> <link href="__ADMIN__/css/font-awesome.min93e3.css?v=4.4.0" rel="stylesheet"> <link href="__ADMIN__/css/animate.min.css" rel="stylesheet"> <link href="__ADMIN__/css/style.min862f.css?v=4.1.0" rel="stylesheet"> </head> <body class="gray-bg"> <div class="ibox float-e-margins"> <div class="ibox-title"> <h5>分类</h5> </div> <div class="ibox-content"> {$id} </div> </div> <script src="__ADMIN__/js/jquery.min.js?v=2.1.4"></script> <script src="__ADMIN__/js/bootstrap.min.js?v=3.3.6"></script> <script src="__ADMIN__/js/content.min.js?v=1.0.0"></script> </body> </html> ~~~ ### 二、默认全部分类展开 ~~~ <div id="jstree"> <ul> <li class="jstree-open">全部展开、折叠 <ul> {volist name="categoryList" id="vo"} <li class="jstree-open">{$vo.catname} <ul> {volist name="vo.son" id="voson"} <li data-jstree='{"type":"html"}'> <a href="{:url('content',['id'=>$voson.id])}">{$voson.catname}</a> </li> {/volist} </ul> </li> {/volist} </ul> </li> </ul> </div> ~~~ ### 三、单击展开或折叠分类 #### 1、修改属性 ~~~ .jstree({ "core": { "check_callback": true, "dblclick_toggle": false //双击属性,默认为true(true为双击;false为单击) }, "plugins": ["types", "dnd"], "types": { "default": { "icon": "fa fa-folder" }, "html": { "icon": "fa fa-file-code-o" }, "svg": { "icon": "fa fa-file-picture-o" }, "css": { "icon": "fa fa-file-code-o" }, "img": { "icon": "fa fa-file-image-o" }, "js": { "icon": "fa fa-file-text-o" } } }); ~~~ #### 2、修改事件 ~~~ $(document).ready(function() { $("#jstree") .on('changed.jstree', function(e, data) { // 改变事件,点击左侧分类,右侧显示相关内容 var url = $('#' + data.node.id).children('a').attr('href'); if (url != '#') { $('#iframe_content').attr('src', url); } }) .on('select_node.jstree', function(e, data) { // 单击事件,单击分类,全部展开,或者折叠 if (data.node.id == 'j1_1') { // is_open() 判断当前节点是否展开 if (data.instance.is_open(data.instance.get_next_dom(data.node))) { var i, j; for (i = 0, j = data.node.children.length; i < j; i++) { data.instance.close_node(data.node.children[i]); // 函数close_node() 循环折叠二级分类 } } else { data.instance.open_all(data.node); } } else {// 函数toggle_node() 展开则折叠,折叠则展开 data.instance.toggle_node(data.node); } }) }); ~~~ ### 四、点击分类,只刷新右侧(右侧框架) ~~~ <div class="col-sm-9"> <iframe id="iframe_content" src="{:url('content')}" style="width:100%; height:100%" frameborder="0" scrolling="atuo"></iframe> </div> ~~~ ## console.log()详解 最常用的方法就是Console.log(),就是在控制台输出内容。 对于JavaScript程序的调试,相比于alert(),使用console.log()是一种更好的方式,原因在于:alert()函数会阻断JavaScript程序的执行,从而造成副作用; alert弹出框需要点击确认比较麻烦,而console.log()仅在控制台中打印相关信息,因此不会造成类似的顾虑。 最重要的是alert只能输出字符串,不能输出对象里面的结构 console.log()可以接受任何字符串、数字和JavaScript对象,可以看到清楚的对象属性结构,在ajax返回json数组对象时调试很方便。 > 参考网址 JavaScript调试技巧之console.log()详解 https://www.cnblogs.com/zdz8207/p/JavaScript-debug-consolelog.html Javascript调试命令——你只会Console.log()? https://segmentfault.com/a/1190000012957199