• 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        任意非空白
            .        任意字符(除'
    '外)
    组合:
            [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
  • 相关阅读:
    MathML
    Redux counterpart rematch dva
    flow
    pauseable 库
    a simple machine learning system demo, for ML study.
    react图工具集成
    SQLite
    Celery
    RabbitMQ installation
    Thunk
  • 原文地址:https://www.cnblogs.com/Michael2397/p/6046489.html
Copyright © 2020-2023  润新知