day4 DOM,BOM

1.     BOM编程

1.1. BOM编程基础

    全称 Browser Object Model,浏览器对象模型。

    JavaScript是由浏览器中内置的javascript脚本解释器程序来执行javascript脚本语言的。

    为了便于对浏览器的操作,javascript封装了对浏览器的各个对象使得开发者可以方便的操作浏览器。

1.2. BOM对象:

1.3. window 对象

       Window 对象是 JavaScript 层级中的顶层对象。

       Window 对象代表一个浏览器窗口或一个框架。

       Window 对象会在 <body> 或 <frameset> 每次出现时被自动创建。

1.3.1.  window中的方法

document    对 Document 对象的只读引用 
    location    用于窗口或框架的 Location 对象
    history    对 History 对象的只读引用。  
document.tilte    设置网页的标题

    moveto()  将窗口左上角的屏幕位置移动到指定的 x 和 y 位置。
    moveby()    相对于目前的位置移动。
resizeTo()   调整当前浏览器的窗口。

    open()        打开新窗口显示指定的URL(有的浏览器中是打一个新的选项卡)
    setTimeout(vCode, iMilliSeconds)        超时后执行代码。
setInterval(vCode, iMilliSeconds)        定时执行代码,第一次也是先待,到时再执行。

2.     事件

a) 事件说明

    基本上所有的HTML元素中都可以指定事件属性。

    每个元素支持什么样事件应查询文档。

    所有的事件属性都是以on开头,后面的是事件的触发方式,如:

       onclick,表示单击

       onkeydown,表示键按下

              ...

b) 常用的事件类型:

鼠标点击相关:
        onclick 在用户用鼠标左键单击对象时触发。 
        ondblclick 当用户双击对象时触发。 
        onmousedown 当用户用任何鼠标按钮单击对象时触发。 
        onmouseup 当用户在鼠标位于对象之上时释放鼠标按钮时触发。 

    鼠标移动相关:
        onmouseout  当用户将鼠标指针移出对象边界时触发。 
        onmousemove 当用户将鼠标划过对象时触发。 

    焦点相关的:
        onblur 在对象失去输入焦点时触发。 
        onfocus 当对象获得焦点时触发。

    其他:
        onchange 当对象或选中区的内容改变时触发。 
        onload 在浏览器完成对象的装载后立即触发。 
        onsubmit 当表单将要被提交时触发。 

location 对象

 

Location 对象是由 JavaScript runtime engine 自动创建的,包含有关当前 URL 的信息。

location中的重要方法:

    href属性   设置或获取整个 URL 为字符串。

    reload()   重新装入当前页面

 

screen 对象

       Screen 对象是由 JavaScript runtime engine 自动创建的,包含有关客户机显示屏幕的信息。

属性:

    availHeight   获取系统屏幕的工作区域高度,排除 Microsoft Windows 任务栏。

    availWidth 获取系统屏幕的工作区域宽度,排除 Windows 任务栏。

    height     获取屏幕的垂直分辨率。

    width      获取屏幕的水平分辨率。

           

示例:

    document.write("屏幕工作区: " + screen.availHeight + ", " + screen.availWidth + "<br>");

    document.write("屏幕分辨率: " + screen.height + ", " + screen.width + "<br>");

 document对象

    该对象代表整个文档页面

 

对象的集合:

    all     获取页面所有元素对象

    forms   获取页面所有表单对象

    images 获取页面所有图片对象

    links   获取所有超链接或area对象

 

具体的内容会在学习DOM时学习。

2.     DOM

2.1. DOM简介

    全称Document Object Model,即文档对象模型。

    DOM描绘了一个层次化的树,允许开发人员添加、删除、修改页面的某一部分。

 

    浏览器在解析HTML页面标记的时候,其实不是按照一行一行读取并解析的,

       而是将HTML页面中的每一个标记按照顺序在内存中组建一颗DOM树,

       组建好之后,按照树的结构将页面显示在浏览器的窗口中。

2.2. 节点层次

HTML网页是可以看做是一个树状的结构,如下:
    html
     |-- head
     |     |-- title
     |     |-- meta
     |     ...
     |-- body
     |     |-- div
     |     |-- form
     |     |     |-- input
     |     |     |-- textarea
     ...   ...   ...

    这是一颗树,是由多个节点(Node)组成的,节点的类型有很多种。

    节点最多有一个父节点,可以有多个子节点。

 

HTML DOM 定义了访问和操作HTML文档的标准方法。

    document

       代表当前页面的整个文档树。

    访问属性

       all

       forms

       images

       links

       body

    访问方法(最常用的DOM方法)

 1 <html xmlns="http://www.w3.org/1999/xhtml">
 2 <head>
 3 <script type="text/javascript">
 4 // 获取dom 树, 获取document 对象.
 5 var dom = window.document;
 6 // all 获取页面中所有的标签节点 ,注释和文档类型约束.
 7 function testAll() {
 8     var allArr = dom.all;
 9     alert(allArr.length);
10     for (var i = 0; i < allArr.length; i++) {
11         //获取节点名称
12         alert(allArr[i].nodeName);
13     }
14 }
15 // anchors 获取页面中的所有的锚连接.
16 function testAnchors() {
17     var anArr = dom.anchors;
18     alert(anArr.length);
19 }
20 // froms  获取所有的form 表单对象
21 function testForms() {
22     var formArr = dom.forms;
23     alert(formArr.length);
24     alert(formArr[0].nodeName);
25 }
26 // images
27 function testImages() {
28     var imageArr = dom.images;
29     alert(imageArr.length);
30 }
31 // links  获取页面的超链接.
32 function testLinks() {
33     var linkArr = dom.links;
34     //alert(linkArr.length);
35     for (var i = 0; i < linkArr.length; i++) {
36         //alert(linkArr[i].nodeName);
37     }
38     for (var i in linkArr) {
39         alert(i);
40     }
41 }
42 //testLinks();
43 // 获取页面的Body
44 var body = dom.body;
45 alert(body.nodeName);
46 </script>
47 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
48 <title>javascript</title>
49 </head>
50 <body onmousemove="test(this)">
51     <img src="xxx" alt="这是一个美女"/>
52         <img src="xxx" alt="这是一个美女"/>
53         <img src="xxx" alt="这是一个美女"/>
54         <a href="http://www.baidu.com">百度一下</a>
55         <a href="http://www.google.com">百度两下</a>
56         <a href="http://www.baigu.com">百谷一下</a>
57         <a name="one"></a>
58         <a name="two"></a>
59         <form>
60             <label>姓名:</label><!--默认不写type 就是文本输入框-->
61             <input  type="text"/>
62         </form>
63 </body>
64 </html>
View Code

获取节点对象案例

    document.getElementById("html元素的id")

    document.getElementsByTagName("标签名")

    document.getElementsByName("html元素的name") 

    示例:

       1,得到所有的div元素并显示信息(innerHTML)。

       2,得到所有div元素中id为"test"的结果。

 1 Var dom = window.document;
 2 function testByTagName() {
 3     var iptArr = dom.getElementsByTagName("input");
 4     for (var i = 0; i < iptArr.length; i++) {
 5         alert(iptArr[i].value);
 6     }
 7 }
 8 // window 对象提供了一个事件, onload 事件 onload(页面加载完毕执行该代码) 是一个事件, 给事件一个方法,
 9 //window.onload = testByTagName;
10 //2,得到所有标签id为"username"的结果。获取旧value值并设置value值
11 function testById() {
12     var user = dom.getElementById("username");
13     alert(user.value);
14     user.value = "rose";
15 }
16 //testById();
17 //3. 获取所有标签name 为like的元素.获取value值.
18 function testByName() {
19     var likeArr = dom.getElementsByName("like");
20     for (var i = 0; i < likeArr.length; i++) {
21         alert(likeArr[i].value);
22     }
23 }
24 testByName();
View Code

  案例

显示页面任意一个节点对象的所有子节点的nodeName、nodeType、nodeValue

  属性操作练习

    1,写一个form,其中有多个checkbox。

    2,获取所有选中的数量。

    3,实现全选与全不选的效果。

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>无标题文档</title>
 6 
 7 <script type="text/javascript">
 8 function getSum()
 9 {
10     /*
11     需求:通过点击总金额按钮获取被选中的条目的金额的总和,并将总金额显示在按钮右边。
12     思路:
13     1,先获取所有的checkbox对象。
14     2,对这些对象进行遍历。判断哪个对象被选中。
15     3,对被选中对象的金额进行累加。
16     4,显示在按钮右边。
17     */
18     
19     var items = document.getElementsByName("item");
20     var sum = 0;
21     for(var x=0; x<items.length; x++)
22     {
23         if(items[x].checked)
24         {
25             sum += parseInt(items[x].value);
26         }
27     }
28     var str = sum+"";
29     document.getElementById("sumid").innerHTML = str.fontcolor('red');
30 }
31 
32 function checkAll(node)
33 {
34     /*
35     需求:通过全选checkbox,将其他条目都选中。
36     思路:
37     只要将全选checkbox的checked状态赋值给其他的item checked状态即可。
38     
39     
40     */
41     //var allNode = document.getElementsByName("all")[index];
42     
43     var items = document.getElementsByName("item");
44     for(var x=0; x<items.length; x++)
45     {
46         items[x].checked = node.checked;
47     }
48 }
49 </script>
50 </head>
51 
52 <body>
53 
54 
55 <div>商品列表</div>
56 <input type="checkbox" name="all" onclick="checkAll(this)"  /> 全选<br />
57 <input type="checkbox" name="item" value="3000" />笔记本电脑3000元<br />
58 <input type="checkbox" name="item" value="3000"  />笔记本电脑3000元<br />
59 <input type="checkbox" name="item" value="3000"  />笔记本电脑3000元<br />
60 <input type="checkbox" name="item" value="3000"  />笔记本电脑3000元<br />
61 <input type="checkbox" name="item" value="3000"  />笔记本电脑3000元<br />
62 <input type="checkbox" name="item" value="3000"  />笔记本电脑3000元<br />
63 <input type="checkbox" name="all" onclick="checkAll(this)"  /> 全选<br />
64 <input type="button" value="总金额:" onclick="getSum()" /><span id="sumid"></span>
65 
66 
67 </body>
68 </html>
View Code

通过节点关系查找节点

    从一个节点出发开始查找:

    parentNode 获取当前元素的父节点。

    childNodes 获取当前元素的所有下一级子元素。

    firstChild 获取当前节点的第一个子节点。

    lastChild  获取当前节点的最后一个子节点。

    nextSibling       获取当前节点的下一个节点。(兄节点)

    previousSibling   获取当前节点的上一个节点。(弟节点)

 

    示例1:

       firstChild属性最普遍的用法是访问某个元素的文本:

       var text=x.firstChild.nodeValue;

      

    示例2:

       parentNode 属性常被用来改变文档的结构。

       假设您希望从文档中删除带有 id 为 "maindiv" 的节点:

       var x=document.getElementById("maindiv");

       x.parentNode.removeChild(x); 

获取节点对象的信息

每个节点都包含的信息的,这些属性是:
    nodeType    节点类型 
    nodeName    节点名称
    nodeValue    节点值


    nodeType
    nodeType 属性可返回节点的类型。    
        ---------------------------------
        元素类型 节点类型 
        ------------------
          元素        1        就是标签元素,例<div>..</div>
          文本        3        标签元素中的文本
          注释        8       表示为注释

    nodeName
        nodeName 属性含有某个节点的名称。
        --------------------------------
        元素节点的 nodeName 是标签名称 
        属性节点的 nodeName 是属性名称 
        文本节点的 nodeName 永远是 #text 
        文档节点的 nodeName 永远是 #document 

    nodeValue
        对于文本节点,nodeValue 属性是所包含的文本。
        对于属性节点,nodeValue 属性是属性值。
        对于注释节点,nodeValue 属性注释内容。
        nodeValue 属性对于文档节点和元素节点是不可用的。
 1  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <script type="text/javascript">
 5 //节点和节点之间的关系.
 6 //获取dom树
 7 var dom = window.document;
 8 //获取指定id 的标签节点.
 9 function test() {
10     var form = dom.getElementById("form1");
11     //获取父节点.
12     //alert(form.parentNode.nodeName);
13     // 获取子节点(Node 包含 文本,注释,标签)
14     var childArr = form.childNodes;
15     //alert(childArr.length);
16     /*
17     for (var i = 0; i < childArr.length; i++) {
18     alert(childArr[i]);
19     }
20     */
21     // 获取第一个孩子.
22     var first = form.firstChild;
23     //alert(first);
24     //最后一个孩子.
25     var last = form.lastChild;
26     //alert(last);
27     // 获取下兄弟(获取弟弟)
28     var sibling = form.nextSibling;
29     //alert(sibling.nodeName);
30     // 获取大哥
31     var previous = form.previousSibling;
32     alert(previous.nodeName);
33 }
34 test();
35 </script>
36 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
37 
38 <title>javascript</title>
39 </head>
40 <body onmousemove="test(this)">
41         <a>哈哈</a>
42         <form id="form1">
43             <label>姓名:</label>
44             <input type="text" />
45         </form>
46 </body>
47 </html>
View Code

节点操作

1.1.1.  创建新节点

    document.createElement("标签名")    创建新元素节点

elt.setAttribute("属性名", "属性值") 设置属性

    elt.appendChild(e)                     添加元素到elt中最后的位置

    elt.insertBefore(new, child);          添加到elt中,child之前。

                                           // 参数1:要插入的节点  参数

2:插入目标元素的位置

    elt.removeChild(eChild)                删除指定的子节点

  1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2 <html xmlns="http://www.w3.org/1999/xhtml">
  3 <head>
  4 <script>
  5 /*
  6 创建节点:
  7 document.createElement("标签名")        创建新元素节点
  8 elt.setAttribute("属性名", "属性值")    设置属性
  9 添加节点到文档树上:
 10 elt.appendChild(e)                        添加元素到elt中最后的位置  把元素添加最后一个子节点的后面。
 11 elt.insertBefore(new, child);            添加到elt中,child之前。
 12                                 // 参数1:要插入的节点  参数2:插入目标元素的位置     
 13                                                         
 14 */
 15 /*
 16 function add(){
 17     //
 18     var inputNode = document.createElement("input"); // 创建一个节点的对象
 19     inputNode.setAttribute("type","file"); //给新节点设置type的属性值。
 20     var body = document.getElementsByTagName("body")[0];
 21     body.appendChild(inputNode);    //把新节点添加到body体中。
 22 }
 23 */
 24 var count = 1;
 25 function add(){
 26     var trNode  = document.createElement("tr");
 27     var tdNode  = document.createElement("td");
 28     var inputNode  = document.createElement("input");
 29     inputNode.setAttribute("type","button");
 30     inputNode.setAttribute("value",count+"");
 31     count++;
 32     tdNode.appendChild(inputNode);
 33     trNode.appendChild(tdNode);
 34     //trNode添加 到指定 的位置上。
 35     var tbodyNode = document.getElementsByTagName("tbody")[0];
 36     //tableNode.appendChild(trNode);
 37     var button1 = document.getElementById("b1");
 38     tbodyNode.insertBefore(trNode,button1); // 注意: 使用obj.insertBefore(o1,o2)这个方法的时候
 39     //obj必须是o1,o2的直接父节点。
 40     //alert(button1.nodeName+"~~"+trNode.nodeName+"~~"+tableNode.nodeName);
 41 }
 42 </script>
 43 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 44 <title>无标题文档</title>
 45 </head>
 46 <body>
 47     <table>
 48         <tr>
 49             <td>
 50                 <input type="button" value="0">
 51             </td>
 52         </tr>
 53         <tr id="b1">
 54             <td>
 55                 <input type="button" value="添加" onclick="add()">
 56             </td>
 57         </tr>
 58     </table>
 59    
 60     
 61 
 62 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 63 <html xmlns="http://www.w3.org/1999/xhtml">
 64 <head>
 65 <script>
 66     function addFile(){
 67         var trNode = document.createElement("tr");
 68         var td1  = document.createElement("td");
 69         var td2  = document.createElement("td");
 70         td1.innerHTML="<input type='file'/>";
 71         td2.innerHTML="<a href='#' onclick='deleteFile(this)'>删除附件</a>"
 72         trNode.appendChild(td1);
 73         trNode.appendChild(td2);
 74         //把trNode添加 到添加按钮上面
 75         var addButton = document.getElementById("addButton");
 76         var tbody = document.getElementsByTagName("tbody")[0];
 77         tbody.insertBefore(trNode,addButton);
 78     }
 79 
 80 
 81     function deleteFile(deleteNode){
 82         //找到要删除的tr  a---->td---->tr
 83         var trNode  = deleteNode.parentNode.parentNode;  //获取到了要删除的tr节点。
 84         // 找 到trNode的父节点
 85         var tbodyNode  =document.getElementsByTagName("tbody")[0];
 86         tbodyNode.removeChild(trNode);
 87         //trNode.removeNode(true); // removeNode() 在firefox上不 支持,在ie支持。
 88     }
 89 
 90 
 91 </script>
 92 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 93 <title>无标题文档</title>
 94 </head>
 95 <body>
 96  <table>
 97         <tr>
 98             <td><input type="file"></td>
 99             <td><a  href="#" onclick="deleteFile(this)">删除附件</a></td>
100         </tr>
101          <tr id="addButton">
102             <td>    
103                 <input type="button" value="添加附件"  onclick="addFile()"/>
104             </td>
105         </tr>
106     </table>
107 
108 </body>
109 </html>
View Code

案例

  1. 生成二级城市联动菜单
  2.  1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2 <html xmlns="http://www.w3.org/1999/xhtml">
     3 <head>
     4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     5 <title>无标题文档</title>
     6 <style type="text/css">
     7 select{
     8     width:100px;
     9     }
    10 </style>
    11 <script type="text/javascript">
    12     function selcity()
    13     {
    14         //定义数据对应关系
    15         //城市有很多,所以通过数组存储。每一个省对应一个城市数组,怎么建立对应关系呢?
    16         //每一个省都有自己的角标。通过角标和数组建立对应关系,这就是二维数组。 
    17         
    18         var arr = [['--选择城市--'],['海淀区','朝阳区','东城区','西城区']
    19                     ,['沈阳','大连','鞍山','抚顺']
    20                     ,['济南','青岛','烟台','威海']
    21                     ,['石家庄','廊坊','唐山','秦皇岛']];
    22                     
    23         //获取选择的省的角标。
    24         var selNode = document.getElementById("selid");
    25         var index = selNode.selectedIndex;
    26         
    27         var cities = arr[index];
    28         
    29         var subSelNode = document.getElementById("subselid");
    30         
    31         //有更简单清除方式,只要改变下拉菜单的长度即可。
    32         subSelNode.options.length = 0;
    33         /*
    34         //清除上一次选择的子菜单内容。
    35         for(var x=1; x<subSelNode.options.length;)
    36         {
    37         
    38             alert(subSelNode.options.length+"..."+subSelNode.options[x].innerHTML+"..."+x);
    39             subSelNode.removeChild(subSelNode.options[x]);
    40         }
    41         */
    42         
    43         
    44         
    45         for(var x=0; x<cities.length; x++)
    46         {
    47             var optNode = document.createElement("option");
    48             
    49             optNode.innerHTML = cities[x];
    50             
    51             subselid.appendChild(optNode);
    52         }
    53     }
    54 </script>
    55 </head>
    56 <body>
    57 <select id="selid" onchange="selcity()">
    58     <option>--选择省市--</option>
    59     <option>北京市</option>
    60     <option>辽宁省</option>
    61     <option>山东省</option>
    62     <option>河北省</option>
    63 </select>
    64 <select id="subselid">
    65     <option>--选择城市--</option>
    66 </select>
    67 </body>
    68 </html>
    View Code

     

  3. 2.动态生成年、月、日字段
  1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2 <html xmlns="http://www.w3.org/1999/xhtml">
  3 <head>
  4 <script type="text/javascript">
  5 /**
  6  * @author Administrator
  7  */
  8 //通过js创建年,月,日
  9 //获取Dom
 10 var dom = window.document;
 11 function myYear() {
 12     //获取年的select
 13     var year = dom.getElementById("year");
 14     //创建年
 15     var minYear = 1900;
 16     var maxYear = new Date().getFullYear();
 17     for (var i = minYear; i <= maxYear; i++) {
 18         //创建Option
 19         var opt = dom.createElement("option");
 20         //设置Option,标签体.
 21         opt.innerHTML = i;
 22         opt.value = i;
 23         //挂载节点
 24         year.appendChild(opt);
 25     }
 26 }
 27 function myMonth() {
 28     var month = dom.getElementById("month");
 29     //创建月
 30     for (var i = 1; i <= 12; i++) {
 31         //创建Option
 32         var opt = dom.createElement("option");
 33         //设置Option,标签体.
 34         if (i < 10) {
 35             opt.innerHTML = "0" + i;
 36             opt.value = i;
 37         } else {
 38             opt.innerHTML = i;
 39             opt.value = i;
 40         }
 41         month.appendChild(opt);
 42     }
 43     month.onchange = myDay;
 44 }
 45 function myDay() {
 46     clear();
 47     //创建天
 48     // 大月1 3 5 7 8 10 12 ,小月4 6 9 11    闰年2月 非闰年的2月
 49     //获取年
 50     var year = dom.getElementById("year").value;
 51     //获取月
 52     var month = dom.getElementById("month").value;
 53     if (year == "") {
 54         alert("请选择年");
 55         return;
 56     }
 57     if (month == "") {
 58         alert("请选择月");
 59         return;
 60     }
 61     //获取天select
 62     var day = dom.getElementById("day");
 63     //一个月至少有28天.
 64     for (var i = 1; i <= 28; i++) {
 65         var opt = dom.createElement("option");
 66         if (i < 10) {
 67             opt.innerHTML = "0" + i;
 68             opt.value = "0" + i;
 69         } else {
 70             opt.innerHTML = i;
 71             opt.value = i;
 72         }
 73         day.appendChild(opt);
 74     }
 75     //大月
 76     var isBigMonth = month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12;
 77     //小月
 78     var isSmallMonth = month == 4 || month == 6 || month == 9 || month == 11;
 79     //闰年    可以整除4但不能整除100 或者 年份可以整除400.
 80     var isLeapYear = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
 81     //判断,如果是大月,添加3天
 82     if (isBigMonth) {
 83         //添加3天
 84         for (var i = 29; i <= 31; i++) {
 85             var opt = dom.createElement("option");
 86             opt.innerHTML = i;
 87             opt.value = i;
 88             day.appendChild(opt);
 89         }
 90     } else if (isSmallMonth) {
 91         //添加2天
 92         for (var i = 29; i <= 30; i++) {
 93             var opt = dom.createElement("option");
 94             opt.innerHTML = i;
 95             opt.value = i;
 96             day.appendChild(opt);
 97         }
 98     } else if (isLeapYear) {
 99         //如果是闰年,添加一天.专门处理闰年2月.
100         var opt = dom.createElement("option");
101         opt.innerHTML = 29;
102         opt.value = 29;
103         day.appendChild(opt);
104     }
105 }
106 function clear() {
107     var day = dom.getElementById("day");
108     var optArr = day.childNodes;
109     for (var i = optArr.length - 1; i >= 0; i--) {
110         day.removeChild(optArr[i]);
111     }
112 }
113 function getBirthday() {
114     //获取Dom
115     var dom = window.document;
116     myYear();
117     myMonth();
118 }
119 getBirthday();
120 </script>
121 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
122 <title>javascript</title>
123 </head>
124 <body>
125     生日:
126         <select id="year">
127             <option></option>
128         </select>
129         <select id="month">
130             <option></option>
131         </select>
132         <select id="day">
133             <option></option>
134         </select>
135     
136 </body>
137 </html>
View Code

      3生产一个验证码

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <script type="text/javascript">
 5 /**
 6  * @author Administrator
 7  */
 8 //验证码  ,4位的,由字符,数字组成.
 9 function createCode() {
10     var datas = ["A", "B", "C", "D", "E", "F", "G", "H", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
11     //随机的从数组中取出4个元素.
12     var mess = "";
13     var index = 0;
14     for (var i = 0; i < 4; i++) {
15         //生成随机数.而且是在数组的长度范围内.
16         //0-9之间的随机数. Math.floor(Math.random()*10)
17         //0到数组长度(不包含)之间的浮点数.,向下取整,
18         var index = Math.floor(Math.random() * datas.length);
19         mess += datas[index];
20     };
21     //
22     var codeSpan = window.document.getElementById("codeSpan");
23     codeSpan.style.color = "red";
24     codeSpan.style.fontSize = "20px";
25     codeSpan.style.background = "gray";
26     codeSpan.style.fontWeight = "900";
27     codeSpan.style.fontStyle = "italic";
28     codeSpan.style.textDecoration = "line-through";
29     codeSpan.innerHTML = mess;
30     codeSpan.value = mess;
31 }
32 createCode();
33 </script>
34 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
35 <title>javascript</title>
36 </head>
37 <body>
38     <span id="codeSpan"></span><a href="#" onclick="createCode()">看不清楚</a>
39     
40 </body>
41 </html>
View Code

正则表达式

位置:
        ^        开头
        $        结尾
次数:
        *        0或多个
        +        1或多个
        ?        0或1个
        {n}        就是n个
        {n,}    至少n个
        {n,m}    最少n个,最多m个
通配符:
        \d        任意数字
        \D        任意非数字
        \s        任意空白
        \S        任意非空白
        .        任意字符(除'\n'外)
组合:
        [a-z]
        [0-9]
        等
组:
        (正则)        匹配括号中正则表达式对应的结果,并暂存这个结果。
        (?:正则)    匹配括号中正则表达式对应的结果,但不暂存这个结果。
        \数字        使用第n个组匹配的结果
使用正则的工具(RegExp类与相关方法)
创建:
        // 方式一
        var regex = new RegExp("正则表达式", "标志");
        // 方式二
        var regex = /正则表达式/标志
参数说明:
正则表达式:
    参见上面的规则 
标志:
    g (全文查找出现的所有 pattern) 
    i (忽略大小写) 
    m (多行查找) 
方法:
        Regexp.test( str )
        String.replace( regex, str )
        
练习:校验表单
  1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2 <html xmlns="http://www.w3.org/1999/xhtml">
  3 <head>
  4 <script>
  5     
  6     //用户名的规则: 第一位是字母,只有由数字与字母 组成,6位。
  7     function checkName(){
  8         //获取到了用户名的值
  9         var userName = document.getElementById("username").value;
 10         var userSpan = document.getElementById("userId"); 
 11         var reg = /^[a-z][a-z0-9]{5}$/i;
 12         if(reg.test(userName)){
 13             //符合规则    
 14             userSpan.innerHTML="正确".fontcolor("green");
 15             return true;
 16         }else{
 17             //不符合规则
 18             userSpan.innerHTML="错误".fontcolor("red");
 19             return false;
 20         }    
 21     }
 22     
 23     
 24     //校验密码  6位
 25     function checkPass(){
 26         var  password  = document.getElementById("pwd").value;
 27         if(password.length>0){
 28             var reg = /^\w{6}$/;
 29             var passSPan = document.getElementById("passId"); 
 30             if(reg.test(password)){
 31                 //符合规则    
 32                 passSPan.innerHTML="正确".fontcolor("green");
 33                 return true;
 34             }else{
 35                 //不符合规则
 36                 passSPan.innerHTML="错误".fontcolor("red");
 37                 return false;
 38             }
 39         }
 40         
 41     }
 42     
 43     
 44     //检验密码是否正确
 45     function ensurepass(){
 46         var  password1 = document.getElementById("pwd").value; //第一次 输入的密码
 47         var password2 = document.getElementById("ensurepwd").value;
 48         if(password2.length>0){
 49             var enSpan  = document.getElementById("ensure");
 50             if(password1.valueOf()==password2.valueOf()){
 51                 enSpan.innerHTML="正确".fontcolor("green");
 52                 return true;
 53             }else{
 54                 enSpan.innerHTML="错误".fontcolor("red");
 55                 return false;
 56             }    
 57         }
 58     }
 59     
 60     
 61     //校验邮箱
 62     function checkEmail(){
 63         var  email  = document.getElementById("email").value;
 64         var reg = /^[a-z0-9]\w+@[a-z0-9]{2,3}(\.[a-z]{2,3}){1,2}$/i;  // .com .com.cn
 65         var emailspan = document.getElementById("emailspan"); 
 66         alert(reg.test(email));
 67         if(reg.test(email)){
 68             //符合规则    
 69             emailspan.innerHTML="正确".fontcolor("green");
 70             
 71             return true;
 72         }else{
 73             //不符合规则
 74             emailspan.innerHTML="错误".fontcolor("red");
 75             return false;
 76         }    
 77     }
 78     
 79     
 80     //校验兴趣爱好: 至少要算中其中 的 一个。
 81     function checkHoby(){
 82         var likes  = document.getElementsByName("like");
 83         var hobySpan =document.getElementById("hobbySpan")
 84         var flag  = false;
 85         for(var i =  0 ; i<likes.length ; i++){
 86             if(likes[i].checked){
 87                 flag =true;
 88                 break;
 89             }    
 90         }
 91 
 92         if(flag){
 93             //符合规则    
 94             hobySpan.innerHTML="正确".fontcolor("green");
 95             return true;
 96         }else{
 97             //不符合规则
 98             hobySpan.innerHTML="错误".fontcolor("red");
 99             return false;
100         }    
101     }
102     
103     
104     
105     //总体校验表单是否可以提交了  如果返回的true表单才可以提交。 上面的表单项必须要每个都填写正确。
106     function checkForm(){
107         var userName = checkName();
108         var pass  = checkPass();
109         var ensure  = ensurepass();
110         var email = checkEmail();
111         var hoby = checkHoby();
112         if(userName&&pass&&ensure&&email&&hoby){
113             return true;
114         }else{
115             return false;    
116         }
117         
118     }
119     
120     
121     
122     
123     
124 
125 
126 </script>
127 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
128 <title>正则表达式</title>
129 </head>
130 <body>                                
131 <form action="success.html" method="get" onsubmit="return checkForm()"> <!--如果表单提交时候触发的方法返回是false,那么该表单不允许提交,如果返回的是true允许提交 -->
132             <table border="1px" width="50%" align="center" cellspacing="0px" cellpadding="3px">
133                 <tr>
134                     <td width="25%">姓名:</td>
135                     <td>
136                         <input type="text" name="username" id="username" onblur="checkName()"/>
137                         <span id="userId"></span>
138                     </td>
139                 </tr>
140                 <tr>
141                     <td >密码:</td><td>
142                         <input type="password"  name="pwd" id="pwd" onblur="checkPass()"/>
143                         <span id="passId"></span>
144                     </td>
145                 </tr>
146                 <tr>
147                     <td>确认密码:</td><td>
148                 <input type="password" name="ensurepwd" id="ensurepwd" onblur="ensurepass()" />                        <span id="ensure"></span>
149                     </td>
150                 </tr>
151                 <tr>
152                     <td>邮箱</td><td>
153                         <input type="text" name="email" id="email" onblur="checkEmail()"/>
154                         <span id="emailspan"></span>
155                         
156                     </td>
157                 </tr>
158                 <tr>
159                     <td>性别</td><td>
160                         <input type="radio" checked="ture" name="gender" id="male" value="male"/>
161 162                         <input type="radio" name="gender" value="female"/>
163 
164</td>
165                 </tr>
166                 
167                 <tr>
168                     <td>爱好:</td><td>
169                         <input type="checkbox" checked="checked"  name="like" />
170                     eat
171                         <input type="checkbox" name="like" />
172                     sleep
173                         <input type="checkbox" name="like"/>
174                     play  
175                     <span id="hobbySpan"></span>
176                     </td>
177                 </tr>
178                 <tr>
179                     <td>城市</td><td>
180                     <select name="city" id="city">
181                         <option value=""> 请选择</option>
182                         <option value="bj"> 北京 </option>
183                         <option value="gz"> 广州 </option>
184                         <option value="sh"> 上海 </option>
185                     </select>
186                     
187                     </td>
188                 </tr>
189                 <tr>
190                     <td>自我介绍</td><td>                    <textarea cols="15" rows="5"  name="myInfo" id="myInfo"></textarea></td>
191                 </tr>
192                 <tr align="center">
193                     <td colspan="2"><!--提交按钮-->
194                     <input type="submit"/>
195                     </td>
196                 </tr>
197             </table>
198         </form>
199 </body>
200 </html>
View Code

 

posted on 2016-11-09 12:20  Michael2397  阅读(152)  评论(0编辑  收藏  举报

导航