分享一個基於jQuery的鎖定表格行列的js指令碼。
網上也有很多鎖定行列的方法,一個是使用css,另一個就是專門的控制元件附帶有鎖定的功能。css的大多數鎖定行,而不能鎖定列。好像看過園子裡的司徒正美,寫過一個用css鎖定行列的,當時css比較爛看不懂,也沒有儲存那個網址(很後悔),現在想要找卻又找不到了。
另一個就是第三方控制元件,這種控制元件很強大,鎖定行列只是附帶的一個小功能。但是有一個比較明顯的缺點,必須使用它的控制元件,我想鎖定GridView,那就不行了。除非你能把他的鎖定方法給研究出來。
最近我在學jQuery,我覺得找個需求來學習,進步會比較快,於是就選擇了鎖定行列的這個需求。
目的:
1、針對<table>來鎖定,只要是table標籤的形式都能鎖定。支援GridView等控制元件。
2、可以鎖定行、鎖定列、同時鎖定行列、鎖定多行多列。
3、使用簡單,無需修改後臺程式碼(後置程式碼)。只需要在前臺稍微做點調整即可。
4、效率不能太差,最好支援多種瀏覽器。
目的確定下來,然後就要想辦法實現了。其實以前也做過兩個版本,因為以前js很爛,也不知道有jQuery這樣的東東,於是就想了一個笨法。先做一個div(divMain),把要鎖定的table放進去,再做三個div,然後把要鎖定的table拷貝到三個div裡面,然後調整div的寬度、高度和位置,分別放在要鎖定的行、列和行列交叉的地方放。然後在寫一個滾動事件,在divMain的滾動條滾動的事件裡,同時滾動上面的div和左面的div。這樣就形成了一個鎖定的效果。
這個方法的缺點很多了,但是水平很爛,也只能這樣了。現在想要提高一下js水平,那麼就要弄個更好一點的。把整個table都拷貝過去是不是太浪費了?能不能只拷貝要鎖定的行、列?
於是呢,就要jQuery動態建立div和需要的table,然後調整他們的寬度、高度和位置,這樣在滾動的時候效率就高了很多,不過也有個問題,那就是精確獲取、設定td的高度和寬度,要能夠支援被撐高的td。這個問題困擾了我好久,昨天在群裡得到了各位高手的幫忙,尤其是“紫風鈴”的指點,才得以突破。
說了這麼多,可能大家都煩了,說一下使用方法。
1、引用jquery-1.4.2.js
2、引用scroll-1.0.js (下載)
3、在要鎖定的table外面加上一個div,並且設定id
4、呼叫js函式,myScroll(`div_Main`,1,1,`tableID`)
第一個引數:要鎖定的table外面的div的ID,
第二個引數:要鎖定的行數(從上面數),可以是0,表示不鎖定行。
第三個引數:要鎖定的列數(從左面數),可以是0,表示不鎖定列。
第四個引數:要鎖定的table的ID。
好了搞定。有幾個注意事項。
1、如果div裡只有一個table,沒有其他的,那麼可以不傳遞tableID這個引數。
2、table的width不能設定百分比的形式,比如100%,這樣很可能造成table被擠在div裡面,沒有橫向的滾動。
對了,還要說一下缺點:
1、程式碼比較爛。初學jQuery,js的功底也很差,所以現在的1.0版本的程式碼只是實現了基本的功能,程式碼的美觀、執行效率那就很差了,以後還需要繼續前進。
2、td的高度和寬度還是差了一些,不過基本上可以忍受。還需要繼續調整。
3、table的行數比較多時(大於100行),初始化時間會很長。初始化就是建立鎖定的行、列的部分。
最後是線上演示的地址:http://demo.naturefw.com/Nonline/other/default.aspx
下一步除了修改bug外,還要實現交替色、滑鼠跟隨、單擊、雙擊、選擇變色等功能。
相關文章
- Flutter 鎖定行列的 FlexGridFlutterFlex
- 【Node.js】寫一個資料自動整理成表格的指令碼Node.js指令碼
- 一個能夠生成 Markdown 表格的 Bash 指令碼指令碼
- 向大家分享一個shell指令碼的坑指令碼
- 分享工作中常用的一個Git指令碼Git指令碼
- 分享一個提高運維效率的 Python 指令碼運維Python指令碼
- jquery js 設定 div 的內容,給 div 新增一個屬性jQueryJS
- 分享兩個實用的shell指令碼指令碼
- 一文詳解基於指令碼的攻擊指令碼
- 基於jQuery的AjaxjQuery
- 製作一個超簡單的全屏外掛(基於JQuery)jQuery
- 基於vue.js實現樹形表格的封裝Vue.js封裝
- 基於Gridsome建立一個基於Vue.JS和Markdown的部落格Vue.js
- 基於jquery的外掛turn.js學習筆記jQueryJS筆記
- 使用Java實現一個JS指令碼引擎JavaJS指令碼
- 一個用於生成大量mac地址的python指令碼MacPython指令碼
- 基於python編寫一個簡單的多執行緒埠掃描指令碼Python執行緒指令碼
- jQuery基礎與js的區別jQueryJS
- 基於Redis實現一個分散式鎖Redis分散式
- KoaHub.js -- 基於 Koa.js 平臺的 Node.js web 快速開發框架程式碼分享Node.jsWeb框架
- 基於ARM的電子密碼鎖的設計密碼
- 基於JQuery的自定義樹形選單表格,實現展開、收起效果jQuery
- 基於jquery實現的ExceljQueryExcel
- 基於Groovy的規則指令碼引擎實戰指令碼
- 基於WiFi的防盜報警Python指令碼WiFiPython指令碼
- 手把手教你實現一個基於Redis的分散式鎖Redis分散式
- 封裝一個簡單的樂觀鎖方法 -基於Laravel 8封裝Laravel
- 從0到1編寫一個JS指令碼引擎JS指令碼
- Yoshino: 一個基於React的可定製化的PC元件庫React元件
- excel鎖定公式$怎麼輸入 表格中如何鎖定公式Excel公式
- 基於bat指令碼的前端釋出流程的優化BAT指令碼前端優化
- 基於Vue.js封裝一個簡單的select元件Vue.js封裝元件
- 終於看到了一個完整的mutect2使用指令碼指令碼
- 一個方便 LeetCode 複習的指令碼LeetCode指令碼
- PHP 使用檔案鎖 避免同時執行一個指令碼PHP指令碼
- 用JS設定一個人的程式的話JS
- Jquery實現的高亮效果程式碼分享jQuery
- 客戶端的js js指令碼的引入 js的解析過程客戶端JS指令碼