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,晚安!


只有注册用户登录后才能发表评论。


网站导航: