成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解Javascript中checkbox樹的功能

開發 前端
本文我們將介紹Javascript中checkbox樹的功能,希望本文能對大家今后有所幫助。

對于Javascript中checkbox樹的功能,扥多人還不是很了解,究竟checkbox樹有何作用,希望本文能對大家有所幫助。研究了幾天,終于搞出自己的樹來。總結一下,留待以后改進用。

作為UI控件的樹與數據結構的樹有很大的不同,它分為根節點,枝節點與葉節點。根節點有子樹,并不隸屬于其他樹。枝節點有子樹,并作為某一子樹的節點而存在。葉節點只作為某一子樹的節點而存在,并且沒有子樹。但僅是這樣,無法繪制樹的。我們看下面的圖,樹在網頁中無論樣子如何,從上到下都是一行行分開的。每一行都有幾張圖片與文本。這些圖片大致分三類,一是虛線圖標與加號圖標與減號圖標,我把它們統稱為連線圖標;二是裝飾用的文件夾圖標,或者根節點的那個地球,或者葉子節點的文檔,或者類似的電腦、蘋果、回收站等等,我稱之為裝飾圖標;***是checkbox,它分三種狀態。圖標的種類如此多,僅是根枝葉加關閉展開這兩種狀態,也只是六種可能,因此我們還得把枝節點細分為普通枝與末枝,葉節點也一樣。由于連線圖標與裝飾圖標的作用很相似,裝飾圖標好像是從視覺上強調點擊連線圖標會出現的效果,因此我們可以用CSS把它們整合到一起,以節省一個DOM。

[[6513]]

我們單獨拿根節點分析。表面上,它有三個圖標,一個文本,實質上,只有兩個圖標,第二作為***個的背景而存在,文本位于span元素中。如果想點擊文字跳轉,也可以換成A元素。此外,還隱藏***一個DIV元素。它是用于裝載子樹與縮進子樹的。這四個元素都位于一個DIV中,我把它稱之為根節點,并設置index屬性,用于與原數據相比較取得父節點的index。

01.var data = [
02.  [0,-1,"中國"],//根節點
03.  [1,0,"北京市"],//枝節點
04.  [2,0,"天津市"],//葉節點
05.  [3,1,"市轄區"],//枝節點
06.  [4,3,"東城區"],//葉節點
07.  [5,3,"西城區"],//葉節點
08.  [6,3,"崇文區"],//葉節點
09.  [7,3,"朝陽區"],//葉節點
10.  [8,3,"豐臺區"]//葉節點
11.]

接著我們給圖標加入一些識別要素,這對樣式表控制還是事件綁定都很有無用,因為僅僅是一個index是非常乏力的。當我們點擊連線圖標,那個加號或減號,我們怎樣讓程序知道是點擊了它呢?!我們給它一個className,為collapse與unfold。只要有這兩個類之一,我們就重設它的className,原來是collapse就改成unfold,反之亦然,然后再更換其src,以達到切換圖片的目的。它后面的裝飾圖標是用樣式表控制(內部樣式),因此當className變了它會reflow,重新渲染頁面。難點在checkbox,當點擊它時,會有一連串反應,更換其父級節點的checkbox,更換自身,再更換其子孫。它有三種狀態,對應三個className。0為子孫元素無選中,1為子孫元素全選中,2為子孫元素部分選中。算法非常復雜,渲染也非常復雜,如img為checkbox圖標,它的parentNode才為樹的節點元素,如果它非根節點,那它肯定還被一個DIV包裹著,img.parentNode.parentNode.parentNode才為其上級的樹節點元素,這個節點的第二個IMG元素就是它頂上的那個checkbox。要訪問其下級的checkbox,就更復雜了!總之,多處用到遞歸,自己看源碼吧。由于沒有學過數據結構與算法,實現有點劣拙,功能這么少也得一百五十行,慚愧萬分。bug也無法自排,因此請勿用于商用,后果自負。

  1. var getPriorCheckbox = function(checkbox){   
  2.    var node = checkbox.parentNode;//取得對應的樹節點   
  3.    if(/root/.test(node.className)){//判斷是否根節點   
  4.     return false;   
  5.    }else{   
  6.     var priorNode = node.parentNode.parentNode;//取得對應的上級樹節點   
  7.     return priorNode.children[1];   
  8.   }   
  9.  } 

原文標題:javascript checkbox樹

鏈接:http://www.cnblogs.com/rubylouvre/archive/2009/10/26/1589692.html

【編輯推薦】

  1. 淺析利用Javascript獲取隨機顏色
  2. JSON是什么?為JavaScript準備的數據格式
  3. 十個最常用的JavaScript自定義函數
  4. 有關JavaScript事件加載的一些延伸思考
  5. JavaScript使用心得匯總:從BOM和DOM談起
責任編輯:彭凡 來源: 博客園
相關推薦

2013-05-08 10:36:07

JavaScriptJS詳解JavaScrip

2017-03-20 14:45:42

JavaScript詳解

2009-09-21 16:59:29

Array擴展

2016-10-11 20:33:17

JavaScriptThisWeb

2009-06-30 15:18:10

StringBuildJava

2009-07-15 10:52:13

JTree組件

2016-12-27 10:19:42

JavaScriptindexOf

2010-09-08 15:13:09

Node節點Node屬性

2009-09-08 13:52:54

CheckBox選中

2009-09-09 10:32:12

C# CheckBox

2009-09-08 09:31:54

c# CheckBox

2009-11-06 13:28:19

Javascript框

2024-04-26 08:27:15

JavaScriptCSSHTML元素

2020-11-18 09:06:02

JavaScript開發技術

2016-08-12 11:04:17

JavaScript物聯網應用

2012-02-02 16:39:40

CheckBox控件源代碼

2010-10-09 09:56:51

JavaScriptObject對象

2011-05-20 13:31:54

Repeatercheckbox

2012-05-28 10:34:50

MVVM 數據綁定

2012-11-28 10:54:33

Windows 8快速啟動
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久久无码国产精品 | 精品美女在线观看视频在线观看 | 高清黄色网址 | 午夜电影网 | 大香网伊人 | 在线综合视频 | 四虎影院在线观看免费视频 | 成人毛片在线视频 | 久久久久久毛片免费观看 | 91在线视频免费观看 | 欧州一区二区 | 97久久久久久久久 | 国产二区精品视频 | 欧美a级成人淫片免费看 | 日韩国产一区二区三区 | 999久久久久久久久6666 | 午夜电影网| 天堂资源最新在线 | 成人在线视频一区 | 国产一区高清 | 日韩一区二区三区视频 | 欧美日本一区 | 欧洲亚洲一区 | www.夜夜草 | 欧美激情在线一区二区三区 | 亚洲一区二区三区在线视频 | 久久久久久久国产精品影院 | 成人免费在线视频 | 男女爱爱福利视频 | 欧美久久免费观看 | 成人精品国产一区二区4080 | 日韩成人在线视频 | 欧美一级大片免费观看 | 麻豆av一区二区三区久久 | cao在线 | 中文字幕日韩一区二区 | 国产美女精品视频 | 亚洲性综合网 | 色久五月 | 午夜精品久久久久久久久久久久 | 日韩成人在线观看 |