[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
- Layer無刷新不跳轉彈框提示信息
- 整合ThinkPHP+實用代碼
- TP整合Layer插件實現無刷新
- 自定義助手函數
- 添加信息失敗后不跳轉
- 三種無限級分類
- TP常用代碼
- 自定義公共函數
- TP模型管理專題
- TP模型管理之添加模型
- sfox_newmodel.sql
- TP模型管理之刪除模型
- TP模型管理之編輯模型
- TP模型管理之字段添加
- sfox_newmodel.sql_edit
- layer_hplus.js_edit
- TP模型管理之字段刪除
- TP模型管理之字段編輯
- TP模型管理之預覽模型
- TP模型管理之公共函數
- layer_hplus.js_修訂一
- TP模型管理之預覽模型靜態頁
- 后臺內容管理系統
- 分類樹顯示
- 內容列表顯示
- 信息發布
- 編輯信息
- layer_hplus.js
- myJs第一版
- myJs第二版
- myJs第三版
- myJs第四版
- TP5插件用法
- Datatables
- WebUploader
- bootstrap-fileinput
- UEditor
- 簡單調用
- 路徑問題
- 跨域多圖上傳
- 跨域單圖上傳
- UEditor圖片跨域上傳解決方案
- 定制工具欄圖標
- ajaxFileUpload
- LayUI
- 圖片上傳
- layui分頁
- 搜索頁
- 搜索優化及刪除
- Uploadify
- TP5前端應用
- 靜態首頁
- 前臺首頁功能實現
- 自定義標簽庫
- 前臺模板繼承應用
- 首頁自定義標簽改進
- 文章內容頁
- 自定義標簽改進
- 自定義標簽修正
- 圖片等比例自動縮放
- 后臺權限管理
- 角色管理
- 規則管理
- 權限設置
- 會員管理
- 權限管理
- 前臺登錄注冊功能
- 注冊登錄
- 阿里大于手機注冊
- 阿里大于升級阿里云短信服務
- 自動登錄完成
- PHP異位或加密實現自動登陸
- 微信開發
- 分享接口
- 靜態頁面實現微信分享
- 動態頁微信分享
- 頁面靜態化
- 1-全站靜態化前期配置
- 2-鏈接地址靜態化
- TP5常用片段代碼
- 加載靜態資源路徑與常量
- thinkphp5預定義常量
- 刪除某文件夾的內容
- 解壓插件包
- 異步提交插件
- 其他功能
- 背景音樂
- 手機訪問PC網站自動跳轉到手機網站代碼
- 手機微信音樂MP3播放器
- 后盾之網頁背景音樂
- 播放器寬度自適應
- 前臺首頁數據調用
- 視頻列表
- 搜索分頁
- H5解決蘋果(IOS)不能自動播放音樂
- 清空緩存
- 文件處理常識
- 刪除路徑下的所有文件夾和文件
- 一鍵清空緩存
- 評論留言
- 格式化時間
- 替換微博內容的URL地址@用戶與表情
- PHP正則理解
- jQuery評論插件
- TP空操作
- TP路由
- 跨域訪問
- 設置請其頭允許跨域請求
- 模板前臺判斷手機訪問跳轉手機網址代碼
- PHP遍歷一個文件夾下所有文件和子文件夾
- PHP獲取視頻的第一幀與時長
- TP5數據庫
- 鏈式操作原理
- update替換字段部分內容
- 后臺開發
- 后臺登錄頁居中顯示
- TP5自帶驗證碼
- JS & JQuery專題
- 二級城市聯動菜單
- 模板引擎
- 混合模板編譯
- 黃永成TP微博開發
- 消息推送
- memcache安裝
- 插件開發
- 插件介紹
- 插件鉤子
- 淺談初步理解鉤子
- 插件鉤子(hooks)分析
- 插件鉤子簡單理解
- 控制器調用插件
- 鉤子通用處理函數
- 插件基類代碼
- 插件測試代碼
- 淺談鉤子與插件
- 技術綜合
- 常用代碼
- PHP
- 56個PHP開發常用代碼片段(上)
- 56個PHP 開發常用代碼片段(中)
- 56個PHP 開發常用代碼片段(下)
- sublime text安裝自動補全注釋的插件
- 影音視頻開發
- 視頻
- H5視頻直播掃盲
- 音樂
- 語音
- PHP實現語音播報功能
- MUI
- 窗體操作