原創jquery插件treeTable(轉)

? ? ?由于工作需要,要直觀的看到某個業務是由那些子業務引起的異常,所以我需要用樹表的方式來展現各個層次的數據。

需求:

? ? ? ? ?1、數據層次分明;

?? ? ? ? 2、數據讀取慢、需要動態加載孩子節點;

?? ? ? ? 3、支持默認展開多少層。

? ? ?在網上找到了很多資料,發現treeTable方面的組件質量都不高,有些還不錯樣式不符合,性能也比較差。想想樹表也挺簡單的,不就是通過隱藏或者展現某些tr來實現嘛。于是乎,自己寫一個。

?

? ? ? 2011年5月4號恰好放假一個下午,于是在家里風風火火開始構造自己的樹表插件。

?? ? ?樣式我就用了http://www.hanpau.com/index.php?page=jqtreetable,包括圖片以及參數命名都借鑒了。但這款插件質量不怎樣,使用方式很麻煩,效率低。

?

一、使用接口

?? ? 個人覺得,接口這部分是一款插件是否好用的核心。

?

? jqTreeTable的用法:

?

? html結構

Html代碼 ?收藏代碼
  1. <span?style="font-size:?small;"><table?id="id">??
  2. <tr><td>1</td></tr>??
  3. <tr><td>2</td></tr>??
  4. <tr><td>3</td></tr>??
  5. <tr><td>4</td></tr>??
  6. </table></span>??

?

? js調用

Js代碼 ?收藏代碼
  1. <span?style="font-size:?small;">var?map?=?[0,?1,?1,?0,?4,?5];??
  2. var?options?=?{};??
  3. $("#id").jqTreeTable(map,?options);</span>??

?

? 這個使用方式比較麻煩,后臺不僅要構造html,而且還要構造出map的數組。

?

?

?所以,我自己的組件改造了這種結構,如下:

?

?? html結構

Html代碼 ?收藏代碼
  1. <span?style="font-size:?small;"><table?id="id">??
  2. <tr?id="1"><td>1</td></tr>??
  3. <tr?id="2"?pId="1"><td>2</td></tr>??
  4. <tr?id="3"?pId="1"><td>3</td></tr>??
  5. <tr?id="4"?pId="3"><td>4</td></tr>??
  6. </table></span>??

?

? ?js調用

Js代碼 ?收藏代碼
  1. <span?style="font-size:?small;">var?options?=?{};??
  2. $("#id").jqTreeTable(options);</span>??

?

? ? 我這種方式只需要構造html,把父子關系當作自定義屬性放在html中,使用相對方便。(注意:我剛開始是使用 key="1" pKey="2"的方式來標識一行的數據,以及行之間的關系,但想到以后通過自定義屬性key來選擇行效率比較低,所以改為id來存儲行的唯一標識。)

?

二、html的格式

? ? 在jqTreeTable中:

?

? ? 扣紅的html對應的格式是:

Html代碼 ?收藏代碼
  1. <span?style="font-size:?small;"><tr>??
  2. <td>6</td>??
  3. <td>??
  4. <img?src="../images/vertline.gif"?class="preimg">??
  5. <img?src="../images/vertline.gif"?class="preimg">??
  6. <img?src="../images/blank.gif"?class="preimg">??
  7. <img?src="../images/tv-collapsable.gif"?class="parimg"?id="treet16">Child?of?4??
  8. </td>??
  9. <td>[0,?2,?3,?4,?6]&nbsp;</td>??
  10. <td>4</td>??
  11. <td>[7]</td>??
  12. </tr></span>??

?

?這里有兩個問題:

? 1、都用圖片在網速慢的情況時會產生很多圖片占用符...,不好看。

? 2、直接用圖片會產生很多小圖片,且不能合并。

?

以下是我優化的結構:

?

Html代碼 ?收藏代碼
  1. <span?style="font-size:?small;"><tr>??
  2. ????<td>6</td>??
  3. ????<td>??
  4. ????????<span?class="pre_span">??
  5. ????????????<span?class="vertline"></span>??
  6. ????????????<span?class="vertline"></span>??
  7. ????????????<span?class="blank"></span>??
  8. ????????????</span>??
  9. ????????<span?class="collapsable"></span>??
  10. ?????????Child?of?4??
  11. ????</td>??
  12. ????<td>[0,?2,?3,?4,?6]&nbsp;</td>??
  13. ????<td>4</td>??
  14. ????<td>[7]</td>??
  15. </tr></span>??

?

?這樣解決了上述問題:

1、在網速慢的情況時只不過看不到背景,可不會出現圖片占用符。

2、使用背景偏移的方式,可以把小圖片合并在同張圖片中。

?

三、原創treeTable的實現

基本邏輯

1、展開節點的圖標有分最后一個跟非最后一個,例如:展開節點時最后一個的展開和最后一個的展開。(需要isLastOne)

2、如果父節點是最后一個節點,則前綴加,如果父節點不是最后一個節點,則前綴加。(需要isLastOne、hasChild)

3、如果有孩子,則顯示+或-號,如果沒有則是普通的葉子節點。(需要hasChild)

4、有孩子的節點點擊則展開或者隱藏相應的子節點。(需要hasChild)
5、如果存在前一個兄弟節點,則使用節點的前綴圖標,若不存在則用父節點的圖標。(需要isFirstOne)
?

實現過程

1、在html中,我只是把父子節點的關系寫在自定義屬性,但對于節點是否有孩 子(hasChild),是否是最后一個節點(isLastOne),是否是第一個節點(isFirstOne),都還不知道。所以第一步要分析出這些信 息,把這些信息都記錄到自定義屬性。【注意:這些信息其實也可以記錄到DOM對象的自定義屬性中,但DOM對象的自定義屬性無法在生成html的時候初始 化,所以不采用。】

2、先掃描所有的tr,構造出兩個map,分別記錄{'pId' => ['id1', 'id2']}和{id => pId}的關系。

3、再次掃描所有的tr,根據兩個map的關系,給tr增加hasChild、isLastOne、isFirstOne等自定義標簽,并開始構造節點圖標。

4、給整個table增加點擊事件監控,如果是來自(hasChild)的父節點則進行點擊事件。【亮點:jqTreeTable是給每個圖標都綁定事件,而我是給整個table綁定一個點擊事件,提高性能。】

?

最后效果:

?

?

?

5月4號那天,花了下午完成基本功能,晚上一直自主加班到1點完善功能和優化性能,包括使用span替換img,使用table整體的點擊事件等。為自己的執著而加班,最后效果還比較滿意。還差將圖片合并成一張,再改改css,就ok了。

?

?

?

原創jquery插件treeTable v1.1

這個版本提高了性能,做了以下改進:

?

* 1、使用了Css Sprite Tools 合并了分散的圖標

* 2、使用了.id的方式來代替原來[pId=id],這樣選擇孩子效率更高

* 3、把css剝離出來,增加動態添加css,每次家在前判斷是否添加過

?

關于第二點,非常感謝onli同學的提醒。但我并沒有直接修改我的接口,直接除去pId,而是在第一次遍歷時將pId作為class名添加到節點中。這樣有兩個好處:

(1)接口可讀性會比較好,pId比class更容易理解。

(2)第二點,如果直接使用class,那節點本來就有樣式,這樣獲取到的className還要去分解空格得到pId,挺麻煩的。

?

?

原創jquery插件treeTable V1.3

這個版本擴展了事件,做了以下改進:

* 1、增加onSelect事件,onSelect: function($treeTable, id){}

* 2、增加beforeExpand事件,beforeExpand?: function($treeTable, id){}

?

動態加載節點就靠beforeExpand 事件了。

?

?

原創jquery插件treeTable V1.4.2

這個版本修復了bug,做了以下改進:

?

* 1、修復了多個tableTree不在同個頁面的bug,并且可以讓不同的tableTree使用不同的主題。

* 2、增加了controller的自定義標簽來控制可點擊的區域。

?

?

?轉:http://zhanchaojiang.iteye.com/blog/1036454

?

  • treeTable.rar (35.1 KB)
  • 描述: treeTable V1.0
  • 下載次數: 210
  • treeTable_V1.1.rar (28.8 KB)
  • 下載次數: 54
  • treeTable_v1.3.rar (29.5 KB)
  • 下載次數: 87
  • treeTable_v1.4.2.rar (42.6 KB)
  • 下載次數: 716

轉載于:https://www.cnblogs.com/zhoujg/archive/2013/04/24/3039486.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248569.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248569.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248569.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

初探Vue3

&#x1f31c;本篇文章目錄\textcolor{green}{本篇文章目錄}本篇文章目錄 &#x1f31b; &#x1f435; 新構建工具Vite\textcolor{blue}{新構建工具Vite}新構建工具Vite &#x1f435; CompositionAPI火爆來襲\textcolor{blue}{Composition API火爆來襲}CompositionAPI火爆來…

linux執行python命令后permission denied

linux下執行python后顯示被拒絕問題定位&#xff1a; 1、檢查下要執行的文件的權限是否存在執行權限&#xff0c;否則執行chmod命令賦予權限&#xff1b; 2、若賦予權限后仍然顯示沒有權限&#xff0c;檢查下執行的python文件是否有權限&#xff0c;否則執行chmod賦予執行權限。…

mysql zip 安裝

第一步下載mysql.zip https://dev.mysql.com/downloads/mysql/5.7.html#downloads 第二步&#xff1a;解壓文件后在其目錄下&#xff0c; 新建 my.ini 注意編碼為ansi&#xff0c;新建 data 空文件夾 my.ini內容為&#xff1a; [mysql]# 設置mysql客戶端默認字符集default…

Vue3的響應式原理解析

Vue3的響應式原理解析 Vue2響應式原理回顧 // 1.對象響應化&#xff1a;遍歷每個key&#xff0c;定義getter、setter // 2.數組響應化&#xff1a;覆蓋數組原型方法&#xff0c;額外增加通知邏輯 const originalProto Array.prototype const arrayProto Object.create(orig…

react Native 環境安裝配置——圖解版一目了然

?原創不易&#xff0c;還希望各位大佬支持一下\textcolor{blue}{原創不易&#xff0c;還希望各位大佬支持一下}原創不易&#xff0c;還希望各位大佬支持一下 &#x1f525; Flutter和reactNative的區別\textcolor{green}{Flutter和react Native的區別}Flutter和reactNative的…

第七章 字典和集合[DDT書本學習 小甲魚]【2】

7.1.2 字典的各種內置方法在序列里為不存在位置賦值&#xff0c;會出現錯誤&#xff1b;而在字典不存在得位置賦值&#xff0c;會創建。工廠函數&#xff08;類型&#xff09;以前學過 str(),int(),list(),tuple()....... 1.fromkeys() 用于創建和返回一個新的字典 不是修改 2…

Installing Node.js and Express on Ubuntu

Installing Node.js and Express on Ubuntu 1. 在nodejs官網上下載Linux Binaries(已經包含了npm):2. 安裝Node.js下載后解壓&#xff0c;并在解壓的文件夾中啟動Terminal后&#xff0c;輸入命令&#xff1a; sudo cp * /usr/local/ -r再輸入命令&#xff1a; node -v …

Chrome插件我只服你——10w人都在使用的瀏覽器插件

?文章摘要導讀\textcolor{blue}{文章摘要導讀}文章摘要導讀 &#x1f525; 為什么選擇Chrome插件\textcolor{green}{為什么選擇Chrome插件}為什么選擇Chrome插件 &#x1f525; 插件具備的強大優勢\textcolor{green}{插件具備的強大優勢}插件具備的強大優勢 &#x1f525; …

H3C通過端口ID決定端口角色

轉載于:https://www.cnblogs.com/fanweisheng/p/11153312.html

特殊屬性

轉載于:https://www.cnblogs.com/mengbin0546/p/10338371.html

一款超強的手機屏幕投影工具

?文章摘要導讀\textcolor{blue}{文章摘要導讀}文章摘要導讀 &#x1f525; 前言\textcolor{green}{前言}前言 &#x1f525; 準備工作\textcolor{green}{準備工作}準備工作 &#x1f525; Scrcpy安裝\textcolor{green}{Scrcpy安裝}Scrcpy安裝 &#x1f525; 工具調試\text…

長度不超過n的連續最大和___優先隊列

題目鏈接: https://nanti.jisuanke.com/t/36116 題目: 在蒜廠年會上有一個抽獎&#xff0c;在一個環形的桌子上&#xff0c;有 nn 個紙團&#xff0c;每個紙團上寫一個數字&#xff0c;表示你可以獲得多少蒜幣。但是這個游戲比較坑&#xff0c;里面竟然有負數&#xff0c;表示你…

JS一維數組轉化為三維數組有這個方法就夠了

今天在CSDN上問答區看到一個提問的小伙伴&#xff0c;是想要將一維數組轉化為三位數組的需求&#xff0c;正好不是很忙&#xff0c;樂于助人的我立馬給這位同學安排上 下面是后端同學返給我們的一維數組數據格式 [{品牌: xiaomi, 機型: 10, 配置: 512},{品牌: xiaomi, 機型: 10…

Hadoop集群安裝

一、完全分布式模式的安裝和配置的具體步驟&#xff1a; 1.配置jdk&#xff1b;2.配置hosts文件&#xff1b;3.建立hadoop運行賬號&#xff1b;4.配置ssh免密碼連入&#xff1b; 5.下載并解壓hadoop安裝包&#xff1b;6.配置namenode&#xff0c;修改site文件&#xff1b;7.配置…

11系列

夢想這東西和經典一樣 永遠不會隨時間而褪色 反而更顯珍貴轉載于:https://www.cnblogs.com/tianjinquan/archive/2010/11/03/1867694.html

webpack相關配置

文章目錄&#x1f4a6; webpack的概念&#x1f4a6; webpack的基本使用項目目錄并初始化創建首頁及js文件以jQuery為例安裝jQuery導入jQuery安裝webpack&#x1f4a6; webpack的相關設置設置webpack的打包入口/出口設置webpack的自動打包配置html-webpack-pluginwebpack中的加載…

Day 21 20190205 老男孩python學習第21天 內容整理

今天寫作業&#xff0c;明天后天要在外旅游 寫作業寫了7個小時。 1 def read_file_as_dict(where):2 staff_dict {}3 f open(%s % where, mode"r", encodingutf-8)4 data f.read()5 f.close()6 row data.strip().split(\n)7 for staff i…

SCOM 簡單界面操作指南 [SCOM中文系列之三]

今天大概介紹下SCOM的管理界面&#xff0c;大概分三個重要的功能版塊 Monitoring 監控版面 Authoring &#xff08;中文版不知道翻譯成什么&#xff0c;主要編輯MP&#xff09; Administration 管理操作 首先說一下管理操作區&#xff0c;開始裝好的SCOM都需要來這里配置一下的…

趁著對象泡腳的功夫,我把vueX吃透了

文章目錄vueX&#x1f31f;Vuex的概述什么是vuexVuex管理數據的優點&#x1f31f;Vuex的基本使用步驟1.安裝 npm i vuex --save2.在src文件目錄下新建store>index.js文件3.口文件里面引入store&#xff0c;然后再全局注入4.使用&#x1f31f;Vuex中的核心特性State在組件中訪…

【題解】FBI序列

題目描述 兩伙外星人策劃在未來的XXXX年侵略地球&#xff0c;侵略前自然要交換信息咯&#xff0c;現在&#xff0c;作為全球保衛隊隊長&#xff0c;你截獲了外星人用來交換信息的一段僅由“F”&#xff0c;“B”&#xff0c;“I”&#xff0c;“O”組成的序列。為了保衛地球和平…