J度空間

          用DIV+Javascript實現標簽功能

            現在很多網站都用到了標簽的切換功能,新浪、迅雷等網站都有,應該說用很很泛濫了。其實 標簽功能是Windows程序中的一種功能,在Delphi或VB等Windows程序開的環境中,很容易就能創建各種漂亮而又功能強大的標簽功能,但在 Web開發中,就沒有這種便利了。
            只需要銷加改動,標簽的數量可以自由添加,而無需要為標簽添加ID,實際上這個功能除了用到Div、Javascript之后,很重要的是要用到CSS樣式。
          ?
          ?
          圖1

             首先我們要確定我們要做什么,我們要做成一個帶三個標簽的區域(圖1),點擊標簽標簽列表的其中一個標簽,內容區域會根據當前點擊的標簽顯示不同的內 容。按照我們一般的做法是每一個標簽對應一個內容區域,給每個內容區域增加一個id屬性,然后為每一個標簽添加一個屬性,就像這樣:
          ?
          <div>???
          ?
          <div>???
          ??
          <div?id="label1"?onmousemove="dosomething()">label1<div>???
          ??
          <div?id="label2"?onmousemove="dosomething()">label2<div>???
          ??
          <div?id="label2"?onmousemove="dosomething()">label2<div>???
          ?
          </div>???
          ?
          <div>???
          ??
          <div?id="content1">第一個label的內容</div>???
          ??
          <div?id="content2">第一個labe2的內容</div>???
          ??
          <div?id="content2">第一個labe2的內容</div>???
          ?
          <div>?????
          </div>??
          ???? 你可能沒有意識到這種辦法會有什么問題,當一個頁面有非常多的標簽塊的話,我們將不得不面臨一個問題,那就是id的命名問題,我們將要為每一個內容區域命 名,這樣不僅增加了代碼量,也增加了javascript編寫的難度,我們不可能為每一個標簽塊寫一堆javascript,就算我將 javascript寫成一個函數或者一個類,我們也會而臨另一個問題,就是調用的時候會有一大堆的參數,因為你需要將這個id傳送過去。并且,很容易因 為人為的疏忽造成錯誤。
            下面,來看看我是如何實現這個功能的吧,可能不是最好的方法,如果你有更好的方法,希望你能告訴我,讓我們一起進步。
          ???? 首先,我們要做的是寫好基本的html代碼,代碼如下:
          ?
          <html>???
          <head>???
          <meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312"?/>???
          </head>???
          ?????
          <body>???
          <ul?id="Label">???
          ?
          <!--我們將第一個標簽的背景色設置紅色,因為默認顯示的是第一個標簽的內容-->???
          ?
          <li?class="CurrentLabel"?style="background-color:?red">標簽1</li>???
          ?
          <li>標簽2</li>???
          ?
          <li>標簽3</li>???
          </ul>???
          <div?id="Container">???
          ????
          <div>這時里是標簽1對應的內容</div>???
          ????
          <!--因為默認是不顯示的,所以要將display屬性設置為none-->???
          ????
          <div?style="display:?none">這時里是標簽2對應的內容</div>???
          ????
          <div?style="display:?none"?class="Content3">這時里是標簽3對應的內容</div>???
          </div>???
          </body>???
          </html>?
          ???
          ????寫好基本html代碼后,我們還需要做一項重要的工作,那就是css樣式,因為li如果沒有css樣式控制,標簽就會以列表的形式出現,基本的CSS樣式代碼如下:
          ?
          ?
          <style?type="text/css">????
          ?#Label?li????
          ?
          {????
          ??
          /*設置ID為Label的元素下所有li元素樣式,主要是要設置float:left這個屬性,這樣才能將li元素排成一排;同時設置了list-style:none這個屬性,目的是防止li元素出現實心圓點*/???
          ??margin-left
          :?1px;????
          ??padding
          :?3px;????
          ??width
          :?40px;????
          ??background-color
          :#94A5F8;????
          ??float
          :left;????
          ??list-style
          :none;????
          ??cursor
          :pointer;????
          ?
          }
          ????
          </style>????
          ???
             下面,我們將要進行最重要的一環了,就是javascript,看到你里,你可能會問,為什么標簽li元素沒有事件呢?如何實現標簽的切換呢,這是因為 我考慮了另一個問題,如果我們需要為每一個標簽添加一個事件的話,確實是一件很麻煩的事情,而且當標簽塊多了的時候,就會增加代碼量,所以我考慮使用動態 添加屬性的方式為每一個標簽添加屬性。
          ?
          ?
          function?LabelAddEvent()????
          ?
          {????
          ??
          var?labels?=?document.getElementById("Label").childNodes;????????//獲取ID為Label無素下的所有子節點,childNodes是DOM的一個屬性????
          ??//對所有子節點進行循環,增加onmouseover事件,也可以根據需要添加onclick事件????
          ??for(var?iLoop?=?0;?iLoop?<?labels.length;?iLoop?++)????
          ??
          {????
          ???
          var?label?=?labels[iLoop];????
          ???
          if?("LI"?==?label.nodeName)???//只處理LI的DOM節點,目的是為了兼容Firefox,因為Firefox會把空格與換行與當成一個節點處理????
          ???{????
          ????label.value?
          =?iLoop;????????//為每一個標簽的value賦上當前的索引,當點擊標簽的時候不用循環標簽就知道是哪一個標簽了????
          ????label.onmouseover?=?function()????
          ????
          {????
          ?????ChangeLabel(
          this);??????????//調用ChangeLabel函數,并把當前對象傳過去????
          ????}
          ;????
          ???}
          ????
          ??}
          ????
          ?}
          ????
            然后,我們在html頁的最后面,調用LabelAddEvent這個函數,即可以為所有標簽添加函數了,是不是很簡潔,當我們有很多標簽塊的時候,就不必要為每個標簽塊添加事件了,下面我們來看看ChangeLabel這個函數:
          ?
          ?
          function?ChangeLabel(oCur)????
          ?
          {????
          ??
          //獲取所有的內容元素子節點????
          ??var?containers?=?document.getElementById("Container").childNodes;????
           
          //獲取所有的標簽????
          ??var?labels?=?document.getElementById("Label").childNodes;????
          ??
          for(var?iLoop?=?0;?iLoop?<?containers.length;?iLoop?++)????
          ??
          {????
          ???
          var?container?=?containers[iLoop];???????
          ???
          var?label?=?labels[iLoop];????
          ???
          //根據索引是否為li元素的value值來判斷是否為當前標簽????
          ???var?current?=?iLoop?==?oCur.value;??????
          ???
          if?("DIV"?==?container.nodeName)?container.style.display?=?current???"block"?:?"none";????
          ???
          if?("LI"?==?label.nodeName)?label.style.backgroundColor?=?current???"red"?:?"#94A5F8";????
          ??}
          ????
          ?}
          ??

             主要代碼就是這么多了,是不是很簡潔呢?當有很多個標簽塊的候,你就會發現這個方法的優勢了,事實下,我們還可以簡單修改一下javascript代 碼,實現多個標簽塊在一個頁面中的功能,接下來我準備結合Xml及Xslt寫一個根據xml配置的多標簽塊的教程,如果你覺得有什么更好的方法可以實現, 請你與我聯系,讓我們共同進步。

          ??
          ??版權所有?Conis,復制或者轉載請保留此信息,任何人未經許可,不得擅自將本文發布作為商業用途。
          ??更多內容更多精彩請您訪問http://www.conis.cn

          posted on 2007-08-28 12:47 藍色幽默 閱讀(911) 評論(1)  編輯  收藏 所屬分類: 網頁設計

          評論

          # re: 用DIV+Javascript實現標簽功能 2008-04-23 09:02 免貴

          實現不了  回復  更多評論   

          導航

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統計

          常用鏈接

          留言簿(4)

          隨筆分類

          文章分類

          相冊

          搜索

          最新評論

          主站蜘蛛池模板: 德庆县| 泰州市| 武胜县| 沭阳县| 额尔古纳市| 贵港市| 綦江县| 台东县| 泗洪县| 平阳县| 长沙市| 德格县| 宾阳县| 普安县| 尖扎县| 嫩江县| 芜湖市| 崇礼县| 体育| 卓资县| 延寿县| 辽中县| 清苑县| 乌兰县| 金溪县| 沁源县| 七台河市| 中超| 进贤县| 科技| 南城县| 科尔| 常熟市| 合江县| 霍邱县| 沂源县| 高唐县| 綦江县| 万源市| 那坡县| 永胜县|