JS樹形插件"jsTree"使用小記

最近在開發(fā)中遇到要在頁面展示無限層級分類的需求,作為后端出身的我追他,要在jsp模板里面寫原生的樹形結(jié)構(gòu)還是有些吃力的坟募,于是網(wǎng)上找了一圈,發(fā)現(xiàn)jsTree這個(gè)插件的口碑不錯(cuò)邑狸,但在實(shí)際使用過程中還是遇到了一些小困難懈糯,記錄下來以便日后檢索

博客原文連接:http://onee.top/2017/03/jstree/
Github:https://github.com/VOREVER
個(gè)人主頁:https://wangyu.space/

基本使用

使用插件當(dāng)然要先引入插件,此插件也是依賴與jQuery的单雾,所以一定要先導(dǎo)入jQuery赚哗,版本要求1.9.0以上,我這里偷個(gè)懶硅堆,直接使用CDN來導(dǎo)入(也建議用CDN來導(dǎo)入屿储,因?yàn)榫€上環(huán)境CDN的加載速度比加載服務(wù)器文件要快。硬萍。)

<link rel="stylesheet"  />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script>

生成樹的方式有好幾種扩所,可以直接寫ul套li標(biāo)簽,插件會(huì)幫你生成好看的樹形樣式朴乖,還有一種就是通過JSON數(shù)據(jù)來生成祖屏,我這里用的就是通過AJAX請求數(shù)據(jù)來生成樹的,首先在HTML中建立一個(gè)空的節(jié)點(diǎn)买羞,取一個(gè)唯一的id袁勺,舉例如下:

<div id="treeDemo"></div>

之后就可以通過js來生成樹啦,先用jQuery獲取DOM對象畜普,接著調(diào)用jsTree的API來生成樹期丰,如下所示:

$('#treeDemo').jstree({
    'core': {
        'data': {
            'id' : 'node_1',
            'text' : 'Node'
        }
    }
});

最后生成的效果就是普普通通的文件樹,類似于文件夾目錄結(jié)構(gòu)吃挑,懶得截圖就不截了钝荡,自行腦補(bǔ),這里要說一下的就是data這個(gè)參數(shù)都有哪些屬性可以來設(shè)置舶衬,官網(wǎng)的API介紹的不全埠通,我在瀏覽器檢查其里獲取了一下data對象,列入data參數(shù)的所有屬性

a_attr: Object // 生成一個(gè)a標(biāo)簽節(jié)點(diǎn)的屬性
li_attr: Object // 生成一個(gè)li標(biāo)簽節(jié)點(diǎn)的屬性
children: Array // 所有子節(jié)點(diǎn)數(shù)組
data: Object // 此節(jié)點(diǎn)的數(shù)據(jù)(沒傳過逛犹。端辱。)
icon: String // 此節(jié)點(diǎn)的圖標(biāo)(沒傳過。虽画。)
id: String // 節(jié)點(diǎn)唯一的id舞蔽,如果不傳會(huì)默認(rèn)生成
original: Object // 后臺傳過來的這個(gè)節(jié)點(diǎn)的所有數(shù)據(jù)
parent: String // 父節(jié)點(diǎn)的id
parents: Object // 所有的父節(jié)點(diǎn)數(shù)組
state: Object // 節(jié)點(diǎn)狀態(tài),這里面有五個(gè)固定屬性码撰,可以傳默認(rèn)值
// 分別是“checked”渗柿、“disabled”、“l(fā)oaded”脖岛、“opened”做祝、“selected”砾省,均為布爾值
text: String // 節(jié)點(diǎn)顯示的文本
type: String // 節(jié)點(diǎn)的類型,我只用過默認(rèn)“default”

當(dāng)然生成樹除了data參數(shù)混槐,還有很多別的參數(shù)可以設(shè)置编兄,以下寫一些我用過的,更詳細(xì)請查閱官方API文檔

$('#treeDemo').jstree({
    // 引入插件
    'plugins': ['checkbox','types','themes','contextmenu'],
    'types': {
        'default': {
            'icon': false  // 刪除默認(rèn)圖標(biāo)
        },
    },
    'checkbox': {  // 去除checkbox插件的默認(rèn)效果
        'tie_selection': false,
        'keep_selected_style': false,
        'whole_node': false
    },
    'core': {
        'multiple' : true,  // 可否多選
        'data' : nodeData,  // 生成節(jié)點(diǎn)的數(shù)據(jù)声登,nodeData是后臺返回的JSON數(shù)據(jù)
        'dblclick_toggle': true   //允許tree的雙擊展開
    }狠鸳,
    'contextmenu': {    // 右鍵菜單
        'items': {
            'edit': {
                'label': '編輯',
                'action': function (data) {}
            },
            'delete': {
                'label': '刪除'
                'action': function (data) {}
            }
        }
    }
});

遇到的坑

基本的用法就在這里,用起來基本上還是比較順利的悯嗓,下面來說說不太順利的件舵,比如如何去刷新一個(gè)樹,或者說換個(gè)數(shù)據(jù)脯厨,如何重新生成铅祸,API里面有刷新的函數(shù)用法如下:

$('#treeDemo').jstree(true).refresh();

如果用了你就會(huì)發(fā)現(xiàn),除了把頁面上所有節(jié)點(diǎn)的選中狀態(tài)都去掉了合武,其他的并沒有用临梗,就算更換了數(shù)據(jù)源,也并不會(huì)生成一棵新的樹稼跳,達(dá)不到我想要的效果盟庞,解決辦法就是...不要去刷新它,直接銷毀掉汤善,然后再重新生成什猖,辦法比較土,但我目前沒找到更好的辦法红淡,銷毀樹的方法如下:

$('#treeDemo').jstree("destroy");

接下來再說另一個(gè)坑不狮,通過右鍵菜單,我想實(shí)現(xiàn)刪除某個(gè)節(jié)點(diǎn)的功能在旱,通過實(shí)現(xiàn)右鍵的監(jiān)聽事件摇零,在API文檔中找到了刪除節(jié)點(diǎn)的函數(shù)delete_node (obj),返回一個(gè)布爾值颈渊,按理說傳一個(gè)節(jié)點(diǎn)對象進(jìn)去就可以了,可是不管是傳對象還是傳節(jié)點(diǎn)id终佛,打死就是不對俊嗽,一直返回false,獲取節(jié)點(diǎn)對象的方法如下:

var inst = jQuery.jstree.reference(data.reference)
var node = inst.get_node(data.reference);

看到文檔中說可以傳個(gè)節(jié)點(diǎn)id的數(shù)組來批量刪除節(jié)點(diǎn)铃彰,那好那就來試試吧

$('#treeDemo').jstree(true).delete_node([node.id]);

成功了??绍豁,什么鬼,我明明只要?jiǎng)h一個(gè)節(jié)點(diǎn)牙捉,非要讓我傳個(gè)數(shù)組竹揍。敬飒。。那接下來又有問題啦芬位,函數(shù)返回刪除成功了无拗,可頁面上的節(jié)點(diǎn)還在啊,這個(gè)問題著實(shí)困擾了我一天都沒有解決昧碉,于是在一個(gè)加班的頁面英染,無意中在官網(wǎng)首頁的一個(gè)子標(biāo)簽里看到一句話,大意是被饿,你要要編輯刪除節(jié)點(diǎn)的話四康,要設(shè)置core.check_callback的值為true,這么重要的東西為什么藏著這么隱蔽狭握。闪金。為什么不寫在API文檔里。论颅。哎垦。于是添加了這個(gè)屬性就好了,如下所示:

$('#treeDemo').jstree({
    'core': {
        'check_callback': true;
    }
});

總結(jié)

jsTree這個(gè)插件還是很好用的嗅辣,遇到的問題先寫這么多撼泛,之后有的話再往里面補(bǔ)充,就這樣澡谭。愿题。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛙奖,一起剝皮案震驚了整個(gè)濱河市潘酗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雁仲,老刑警劉巖仔夺,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異攒砖,居然都是意外死亡缸兔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門吹艇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惰蜜,“玉大人,你說我怎么就攤上這事受神∨撞” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長财著。 經(jīng)常有香客問我联四,道長,這世上最難降的妖魔是什么撑教? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任朝墩,我火速辦了婚禮,結(jié)果婚禮上驮履,老公的妹妹穿的比我還像新娘鱼辙。我一直安慰自己,他們只是感情好玫镐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布倒戏。 她就那樣靜靜地躺著,像睡著了一般恐似。 火紅的嫁衣襯著肌膚如雪杜跷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天矫夷,我揣著相機(jī)與錄音葛闷,去河邊找鬼。 笑死双藕,一個(gè)胖子當(dāng)著我的面吹牛淑趾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播忧陪,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扣泊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嘶摊?” 一聲冷哼從身側(cè)響起延蟹,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叶堆,沒想到半個(gè)月后阱飘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡虱颗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年沥匈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忘渔。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡高帖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辨萍,到底是詐尸還是另有隱情棋恼,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布锈玉,位于F島的核電站爪飘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拉背。R本人自食惡果不足惜师崎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望椅棺。 院中可真熱鬧犁罩,春花似錦、人聲如沸两疚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诱渤。三九已至丐巫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勺美,已是汗流浹背递胧。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赡茸,地道東北人缎脾。 一個(gè)月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像占卧,于是被迫代替她去往敵國和親遗菠。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容