posts - 297,  comments - 1618,  trackbacks - 0

          蜜果私塾:DOM,黑色藝術的終結者(1

          ——緣起與元素的選取

          文:阿蜜果

          日期:2011-10-31

          版權所有,轉載請注明出處

          1、 緣起

          1.1 DOM

          DOMDocument Object Model文檔對象模型)可以以一種獨立于平臺和語言的方式訪問和修改一個文檔的內容和結構。換句話說,這是表示和處理一個HTMLXML文檔的常用方法。

          有一點很重要,DOM的設計是以對象管理組織(OMG)的規約為基礎的,因此可以用于任何編程語言。最初人們把它認為是一種讓JavaScript在瀏覽器間可移植的方法,不過DOM的應用已經遠遠超出這個范圍。DOM技術使得用戶頁面可以動態地變化,如可以動態地顯示或隱藏一個元素,改變它們的屬性,增加一個元素等,Dom技術使得頁面的交互性大大地增強。

          1DOM中的“D

          此處的“D”即“Document”,當創建了一個網頁并把它加載到Web瀏覽器中時,DOM就在幕后悄然而生,它將根據編寫的網頁文檔創建一個文檔對象。

          2DOM中的“O”

          此處的“O”即“對象”,“對象”是一個獨立的數據集合,與某個特定對象相關聯的變量被稱為該對象的屬性,可通過某個特別對象去調用的函數被稱為這個對象的方法。

          JavaScript語言中的對象可以分為三種類型:

          用戶定義對象(user-defined object):由程序員自行創建的對象;

          內建對象(native object):內建在JavaScript語言的對象,如ArrayMathDate等;

          宿主對象(host object):由瀏覽器提供的對象,例如window對象(對應瀏覽器窗口本身)。

          3DOM中的“M

          DOM將一個文檔表示為一個家譜樹,家譜樹的典型用法是表示一個人類家族的譜系并使用父、子、兄弟等記號來表示家族成員之間的關系。它可以將一些相對復雜的關系使用簡明地表示出來:一個特定的家族成員既是某些成員的父輩,又是另一位成員的子輩,同時還是另一位成員的兄弟。家譜樹也非常適合用來表示一份用HTML語言編寫的文檔。

          一般的HTML文檔的根元素為html,有兩個子節點headbody,這兩者又有各自的子孫節點,例如head常見的子節點有metatitle,而metatitle由互為兄弟節點。

          1.2 DHTML

          DHTMLDynamic HTML,動態的HTML)是相對傳統的靜態的HTML而言的一種制作網頁的概念。它其實并不是一門新的語言,它只是HTMLCSS和客戶端腳本JavaScript的一種集成。DHTML不是一種技術、標準或規范,只是一種將目前已有的網頁技術、語言標準整合運用,制作出能在下載后仍然能實時變換頁面元素效果的網頁設計概念。

          DHTML背后的含義是:

          利用HTML將元素標記為各種元素;

          利用CSS設計將各有關元素的排版樣式并確定它們在窗口中的顯示位置;

          利用JavaScript實時的操控和改變各有關樣式。

          從理論上來說,利用DHTML,可以將復雜的動畫結果變成為非常容易。例如,在如下的實例中,首先使用HTML定義一個idtextdiv的頁面元素:

          <div id=”textdiv”>這是一個測試元素</div>

                接著可以利用CSS定義該元素的位置樣式:

          #textdiv {
              position
          : absolute;
              left
          : 50px;
              top
          :100px;
          }

              接著可以通過JavaScript腳本改變textdiv元素的lefttop屬性的值,從而使得該div在頁面上隨意移動。

          理論上來說,DHTML如此簡單,但是瀏覽器操作元素的方式各異,因此在實際編碼過程中會遇到很多困難。

          1.3 瀏覽器的差異性

          Netscape公司的 DOM使用了其專有的元素,這些元素稱為層(layer)。這些層都有唯一的IDJavaScript代碼需要類似這樣使用它們:

          document.layers[‘textdiv’];

          而在微軟公司的DOM中如此使用:

          document.all[‘textdiv’];

          如果要獲得該元素的left屬性的值,在Netscape Navigator 4瀏覽器中必須這樣做:

          var xpos = document.layers[‘textdiv’].left;

          IE 4中,所用的編碼如下:

          var xpos = document. all[‘textdiv’].leftpos;

          類似這樣的差異性很多,使開發人員陷入難堪的境地:很多JavaScript代碼需要在檢測到不同的瀏覽器類型后,進行不同的編碼,非常繁瑣。除了在JavaScript實現方面的差異以外,Netscape NavigatorIE瀏覽器對CSS的支持方面也各不相同,有不少程序員把編寫那些同時工作在這兩種瀏覽器環境下的樣式表和腳本視為“黑色藝術”。

          1.4 呼喚標準的制定

                   技術界的絕大多數標準都不是無中生有的,而且當在瀏覽器的制造商們為了壓倒對手而以DOM為武器展開一場營銷大戰的同時,W3C推出了一個標準化的DOM。各大瀏覽器制造商拋棄彼此的敵意,與W3C攜手制定標準,并在新推出的版本中對標準提供了良好的支持。

                   使用標準的DOM后,可以使用document.getElementById(‘元素ID’)來取代document.layers[‘元素ID’]document.all[‘元素ID]獲得頁面的某個元素,若要獲得前面的textdiv對象的left屬性的值,可以使用如下 JavaScript語句:

          var xpos = document.getElementById(‘textdiv’).left;

                通過W3C推出的標準化的DOM,可以讓任何一種程序設計語言對使用任何一種標記語言編寫出來的任何一份文檔進行操控。

          2、 元素的選取

          2.1 使用getElementById()方法

              該方法返回一個與給定id元素值的元素節點相對應的對象,在使用該方法時,請注意大小寫。不過必須注意這個id必須是唯一的,如果定義了多個同樣的id,通過這個方法獲取到的將是第一個被定義的元素。

          如下JavaScript代碼將第一個idtextdiv的元素置為不可見,并打印該方法返回的類型:

          <html>
              
          <head>
                  
          <title>getElementById方法測試</title>
              
          </head>
              
          <body>
                  
          <div id="textdiv">測試1</div>
                  
          <div id="textdiv">測試2</div>
                  
          <script type="text/javascript">
                      document.getElementById(
          "textdiv").style.display = "none";
                      alert(
          typeof document.getElementById("textdiv"));
                  
          </script>
              
          </body>
          <html>

          測試可發現,頁面上只顯示“測試2”的文本,“測試1”的文本被隱藏,彈出窗口提示“object”。

           

          2.2 使用getElementsByTagName()方法

                   該方法返回一個對象數組,每個對象分別對應著文檔里著給定標簽的一個元素。該方法只有一個參數,它的參數是HTML標簽的名字:

          element.getElementsByTagName(tag);

                   因為該方法返回的是數組對象,所以可以用length屬性得到數組元素的個數。例如如下語句打印名字為li的元素的個數:

          alert(document.getElementsByTagName(“li”).length);

                  getElementsByTagName()方法允許我們把一個通配符當作它的參數,表示文檔中的每個元素都將在這個函數返回數組中占有一席之地。如下代碼打印文檔中有多少個節點:

          alert(document. getElementsByTagName(“*”).length);

                 如下代碼測試getElementsByTagName方法的使用:

          <html>
              
          <head>
                  
          <title>getElementsByTagName測試</title>
              
          </head>
              
          <body>
                  
          <ul id="test">
                     
          <li>Amigo</li>
                     
          <li>阿蜜果</li>
                     
          <li>謝星星</li>
                  
          </ul>
                  
          <script type="text/javascript">
                      alert(
          typeof document.getElementsByTagName("li"));
                      
          var items = document.getElementsByTagName("li");
                      alert(items.length);
                      
          for (var i = 0; i < items.length; i++{
                          alert(items[i].firstChild.nodeValue);
                      }

                  
          </script>
              
          </body>
          <html>

               多次彈出的窗口的值如下:

          object
          3
          Amigo
          阿蜜果
          謝星星

           3、 參考文檔

          1)《DOM_百度百科》:

          http://baike.baidu.com/view/14806.htm

          2)《dhtml_百度百科》

          http://baike.baidu.com/view/8389.htm

          3)《JavaScript  DOM編程藝術 [] Jeremy Keith 著,楊濤、王曉云等譯,人民郵電出版社出版

          posted on 2011-10-31 13:51 阿蜜果 閱讀(2509) 評論(5)  編輯  收藏 所屬分類: Javascript


          FeedBack:
          # re: 蜜果私塾:DOM,黑色藝術的終結者(1)
          2011-10-31 19:14 | 太陽城
          不錯的選擇  回復  更多評論
            
          # re: 蜜果私塾:DOM,黑色藝術的終結者(1)
          2011-11-01 18:35 | 瘋狂
          要出書了么  回復  更多評論
            
          # re: 蜜果私塾:DOM,黑色藝術的終結者(1)
          2011-11-01 20:03 | 阿蜜果
          @瘋狂
          倒是想寫本新書,但是還沒想好主題,沒動作啦。
          最近是因為辭職了,也暫時沒想找工作,充電、總結一下。
            回復  更多評論
            
          # re: 蜜果私塾:DOM,黑色藝術的終結者(1)[未登錄]
          2011-11-01 22:11 | 瘋狂
          出吧,你的書我都在圖書管都看了。到時候出書找你吧  回復  更多評論
            
          # re: 蜜果私塾:DOM,黑色藝術的終結者(1)
          2011-11-11 13:47 | tbw淘寶
          不錯  回復  更多評論
            
          <2011年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

                生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
                我的作品:
                玩轉Axure RP  (2015年12月出版)
                

                Power Designer系統分析與建模實戰  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關注blog

          積分與排名

          • 積分 - 2296322
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 汉沽区| 灵丘县| 宜良县| 雷山县| 岗巴县| 毕节市| 庄河市| 楚雄市| 南充市| 比如县| 伊宁县| 喀什市| 通榆县| 宁乡县| 汕尾市| 彭山县| 德州市| 莆田市| 获嘉县| 虞城县| 大宁县| 通道| 广南县| 高要市| 唐河县| 永年县| 环江| 常州市| 于田县| 嘉荫县| 大化| 金门县| 江孜县| 本溪市| 汤阴县| 夹江县| 红桥区| 教育| 饶平县| 华容县| 平南县|