posts - 78, comments - 34, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

                   今天學習JavaScriptDOM加強,javascript靈活性大家都知道。但我們學習的只是使用JavaScript

          對頁面的操作,為學習AJAX打下基礎。

           

                   JavaScriptDOM對頁面的直接操作,使用戶的體驗更加舒暢。再加上CSS的裝飾,那簡直太完美了!JavaScriptDOM的使用并不復雜,相比那些專業搞JavaScript開發簡單的多。下面我整理一下今日的學習內容。

           

          一、DOM(DocumentObjectModel)

          Dhtmlxml文檔

          Odocument對象的屬性和方法,它是核心對象,代表整個頁面。

          M:模型

           

          DOM樹這個東西,很多培訓機構都有講,看來他是一個經典!(用老佟的)

          clip_image002

          把上面的圖片旋轉180度,你就會看到一棵樹。

           

          二、節點及其類型

          這個是重點,一定要牢記,首先知道了DOMDOM下面就是這些。把框架記住了,使用JavaScriptDOM那就容易了。

           

                   1.節點分為三種類型:

                   1).元素節點

                   2).屬性節點

                   3).文本節點

                   例如“<a href=”http://www.itcast.com.cn”>傳智播客</a>”,“<a></a>”是元素節點,“href”是屬性節點,“傳智播客”是文本節點。Htmlxml就不是這些節點相互套用嗎!

           

          三、屬性和方法

          1.查找節點:

          document.getElementById(Id);:根據指定的ID屬性值返回元素節點,Id是全局唯一的。如果不存在返回null

          document.getElementsByName(name);:根據指定的name屬性值,返回所有的元素節點。返回一個數組集合,可以調用它的length查看它的數量。

          node.hasChildNodes();查看元素節點是否有子節點,有返回true,無返回false。對屬性節點和文本節點無效。

                  

          2.節點屬性:

          node.nodeName;返回節點的名稱,只讀屬性。

          node.nodeType;返回節點的類型,只讀屬性。返回1是元素節點,返回2是屬性節點,返回3是文本節點。

          node.nodeValue;返回或設置節點的值,讀/寫屬性。對元素節點無效。

          node.parentNode;返回節點的父節點,只讀屬性。

          node.childNodes;返回節點的所有子節點,是一個數組集合,只讀屬性。

          node.firstChild;返回節點的第一個子節點,只讀屬性。

          node.lastChile;返回節點的最后一個子節點,只讀屬性。

          node.nextSibling;返回節點的下一個兄弟節點,只讀屬性。

          node.previousSibling;返回節點的前一個兄弟節點,只讀屬性。

          node.innerHTML; 瀏覽器幾乎都支持該屬性,但不是 DOM 標準的組成部分。用來讀\寫某給定元素里的 HTML內容。

           

          3.節點方法:

          paraentNode.replaceChild(newChildNode, oldChildNode);替換節點,返回被替換節點的指針。如果新節點有子節點,也將被插入。

          node.getAttribute(attributeName);返回節點屬性值,如果不存在名稱為attributeName的屬性,返回空字符串。

          node.setAttribute(attributeName, attributeValue);設置節點屬性值。

          document.createElement(nodeName);創建元素節點。

          document.createTextNode(nodeName) ;創建一個文本節點。

          node.appendChild(newNode);追加一個子節點。

          node.insertBefore(newNode, targetNode);targetNode節點前插入一個新節點。

           

          整體上內容就這么多,不過今天還有三個練習。上邊的內容看起來簡單,但實際應用中并沒那么容易。這也許就是JavaScript吧!——看著簡單,用起來十分難!

           

          4.練習:

          1).在一個下拉列表框中選擇省份,在另一個下拉列表框中顯示對應的城市。

          省份與城市的數據保存在xml文件中,在此只列出關鍵JavaScript代碼。

           

          Javascript:

          window.onload = function(){

              var province = document.getElementById("province");

             

              // 設置<select id="province">的被改變事件

              province.onchange = function(){

                 //----- 每次選擇省份時,要清空<select id="province">下的原有城市 -----

                 var selectCity = document.getElementById("city");

                 var oldcities = selectCity.childNodes;

                 // 要保留請選擇...”,所以從1開始

                 var len = oldcities.length-1;

                 for(var i=1; i<len;i++){

                     selectCity.removeChild(selectCity.lastChild);

                 }  

                

                 //----- 獲取城市并顯示 ------

                 // 獲取當前省份

                 var province = this.value;

                 if(province != ""){

                     // 加載XML文件

                     var cityDoc = parseXml("cities.xml");

                     // 查找指定省份節點        

                     var provinces = cityDoc.getElementsByTagName("province");

                     var provinceNode = null;

                     for(var i=0; i < provinces.length; i++){

                        if(provinces[i].getAttribute("name") == province){

                            provinceNode = provinces[i];

                            break;

                        }

                     }

                     // 獲取對應省份的所有城市

                     var cities = provinceNode.childNodes;

                     // 包裝城市,插入到<select id="city">

                     for(var i=0; i<cities.length;i++){

                        if (cities[i].hasChildNodes()) {

                            // 創建option元素節點

                            var optionNode = document.createElement("option");

                            // 創建文本節點

                            var textNode = document.createTextNode(cities[i].firstChild.nodeValue);

                            // 將文本節點添加到option元素節點

                            optionNode.appendChild(textNode);

                            // option元素節點添加到select元素節點中

                            selectCity.appendChild(optionNode);

                        }

                     }

                 }     

              }

          }

           

          2).添加和刪除聯系人,并在當前頁面動態顯示聯系人信息。

          window.onload = function(){

          //------------ 添加聯系人 ---------------  

              //獲取提交按鈕

              var sbumitform = document.getElementById("submit");

              //設置提交事件

             

              sbumitform.onclick = function(){

                 // 獲取提交的聯系人信息

                 var name = document.getElementById("name").value;

                 var phone = document.getElementById("phone").value;

                 var address = document.getElementById("address").value;

                 // 人名不能為空,如果空則返回并提示。使用正則表達式替換。

                 var reg = /^\s*|\s*$/gi;

                 name = name.replace(reg, "");

                 if(name == ""){

                     alert("請輸入姓名!");

                     return false;

                 }

                 //創建表格中的<tr>節點

                 var trNode = document.createElement("tr");

                 //創建表格中的<td>節點,并將信息添加進去

                 var tdNameNode = document.createElement("td");

                 tdNameNode.appendChild(document.createTextNode(name));

                 var tdPhoneNode = document.createElement("td");

                 tdPhoneNode.appendChild(document.createTextNode(phone));

                 var tdAddressNode = document.createElement("td");

                 tdAddressNode.appendChild(document.createTextNode(address));

                 var tdDeleteNode = document.createElement("td");

                 var aNode = document.createElement("a");

                 aNode.setAttribute("href","/delete?id=");

                 aNode.appendChild(document.createTextNode("delete"));

                 tdDeleteNode.appendChild(aNode);

                 //td添加到tr

                 trNode.appendChild(tdNameNode);

                 trNode.appendChild(tdPhoneNode);

                 trNode.appendChild(tdAddressNode);

                

                 //tr添加到table

                 document.getElementById("contacters").appendChild(trNode);

                 return false;

              }

             

          //------------ 刪除系人 ---------------

              // 獲取所有a節點

              var deletes = document.getElementsByTagName("a");

              // 設置它們的onclick事件

              for(var i=0; i < deletes.length; i++){

                 deletes[i].onclick = function(){

                     // 獲取姓名,并詢問是否刪除

                     var name = this.parentNode.parentNode.firstChild.firstChild.nodeValue;

                     var doDelete = confirm("確認刪除聯系人"+name+"?");

                     if(doDelete == true){

                        // 刪除聯系人

                         this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode);

                     }         

                     return false;

                 }

              }

          }

           

          3).人性化選擇喜好:全選、反選、全不選、提交

          function funcheckedAll(){

              // 獲取所有選擇項

              var items = document.getElementsByName("items");

              for(var i=0; i<items.length;i++){

                 // 設置為選中狀態

                 items[i].checked = "checked";

              }

          }

           

          function funcheckedNo(){

              // 獲取所有選擇項

              var items = document.getElementsByName("items");

              for(var i=0; i<items.length;i++){

                 // 設置為非選中狀態

                 items[i].checked = null;

              }

          }

           

          window.onload = function(){

              //為按鈕添加事件處理代碼,FORM中的button就是為javascript而生!

              // 全選

              var checkedAll = document.getElementById("CheckedAll");

              checkedAll.onclick = function(){

                 funcheckedAll();

              }

              // 全不選

              var checkedNo = document.getElementById("CheckedNo");

              checkedNo.onclick = function(){

                 funcheckedNo();

              }

              // 反選

              var checkedRev = document.getElementById("CheckedRev");

              checkedRev.onclick = function(){

                 // 獲取所有選擇項

                 var items = document.getElementsByName("items");

                 for(var i=0; i<items.length;i++){

                     // 判斷是否為選中狀態,然后設置為反向狀態

                     if(items[i].checked == true){

                        items[i].checked = null;

                     } else {

                        items[i].checked = "checked";

                     }

                       

                 }

              }

              // 提交,顯示所有被選中的項目

              var checkedSubmit = document.getElementById("send");

              checkedSubmit.onclick = function(){

                 // 獲取所有選擇項

                 var items = document.getElementsByName("items");

                 var itemssend = "";

                 for(var i=0; i<items.length;i++){

                     // 判斷是否為選中狀態,然后設置為反向狀態

                     if(items[i].checked == true){

                        itemssend += items[i].value +"\r\n";            

                     }            

                 }

                 // 如果有被選中的項目,則提示

                 if(itemssend != "")

                     alert(itemssend);

              }  

              // 全選/全不選 checkbox

              var checkedAll_2 = document.getElementById("checkedAll_2");

              checkedAll_2.onclick = function(){

                 // 設置標簽

                 if(checkedAll_2.checked == true){

                     funcheckedAll();

                 } else {

                     funcheckedNo();

                 }

              }

              //設置每一項的onclick事件,它們將影響全選/全不選的狀態。

              var items = document.getElementsByName("items");

              for(var i=0;i<items.length;i++){

                 items[i].onclick = function(){

                     // 取出所有項,判斷他們的選中狀態。

                     var items = document.getElementsByName("items");

                     var checkedAll = true;

                     for(var i=0;i<items.length;i++){

                        if(items[i].checked == false){

                            checkedAll = false;

                            break;

                        }

                     }

                     // 如果全部選中,則設置全選/全不選為選中狀態

                     var checkedAll_2 = document.getElementById("checkedAll_2");

                     if(checkedAll == true){

                        checkedAll_2.checked = "checked";

                     }else{

                        checkedAll_2.checked = null;

                     }

                 }

              }

          }

           

           

                   Merry Christmas,晚安!


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 连城县| 胶南市| 叶城县| 高安市| 新沂市| 海口市| 合江县| 霍邱县| 阜新| 姜堰市| 甘谷县| 兴和县| 邹平县| 石屏县| 方正县| 南靖县| 揭西县| 陆良县| 焉耆| 安顺市| 阿鲁科尔沁旗| 潢川县| 聂拉木县| 芮城县| 同江市| 庄浪县| 镇安县| 永丰县| 铁岭市| 邵阳县| 太和县| 本溪| 永安市| 广南县| 吉安县| 濮阳市| 阿勒泰市| 泸州市| 元氏县| 新建县| 巴青县|