• JavaScript


    JavaScript:增强用户和HTML的交互

    JS基础

    * 概念:一门客户端脚本语言
      * 运行在客户端浏览器中的,每一个浏览器都有JavaScript的解析引擎
      * 脚本语言:不需要编译,直接就可以被浏览器解析执行了

    * 功能
      * 可以增强用户和HTML页面的交互过程,可以来控制HTML元素,让页面有动态的效果,增强用户的体验

    * JavaScript的发展史
      * 1992年,Nombase公司开发出第一门客户端脚本语言,专门用于表单校验,命名为:C - -,后来更名为ScriptEase
      * 1995年,Netscape公司,也开发了一门客户端脚本语言:LiveScript。后来,请来了SUN公司的专家,修改LiveSript,命名为JavaScript
      * 1996年,Microsoft公司,抄袭了JavaScript开发出了JScript语言,搅乱了市场
      * 1997年,ECMA(欧洲计算机制造商协会),制定ECMAScript,成为了所有客户端脚本语言的标准

      * JavaScript  =  ECMAScript + JavaScript特有的东西(BOM + DOM)

    ECMAScript

    * 基本语法
      * 与HTML的结合方式
        * 内部JS:定义<script>标签,标签体的内容就是JS代码
        * 外部JS:定义<script>标签,通过src属性引入外部的JS文件
        * 注意:<script>标签可以定义在html的任何位置,且可定义多个
            但是JS代码的位置会影响页面加载的顺序
      * 注释
        * 单行注释: // 注释内容
        * 多行注释: /* 注释内容*/

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
        <!--    内部JS-->
        <script !src="">
            alert("我是内部JS")
    
            // 单行注释
    
            /*
            多行注释
            */
            
        </script>
    
        <!--    外部JS-->
        <script src="a.js"></script>
    
    </head>
    <body>
    
    <input type="text">
    
    
    
    
    </body>
    </html>
    View Code

      * 数据类型
        * 原始数据类型(基本数据类型):
          * number:整数、小数、NaN
          * string:字符、字符串
          * boolean:布尔值
          * null:空对象的占位符
          * undefined:未定义,如果一个变量没有给初始化值,默认就为 undefined
        * 引用数据类型(对象):

      * 变量
        * 一小块存储数据的内存空间
        * Java语言是强类型的语言,JS是弱类型的语言
          * 强类型:在开辟变量存储空间时,定义了空间将来存储的数据的数据类型。只能存储固定类型的数据
          * 弱类型:在开辟变量存储空间时,不定义空间将来的存储数据类型,可以存放任意类型的数据
        * 语法:
          * var 变量名 = 初始化值;

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>变量</title>
    
        <script !src="">
            
            /* var a = 3;
             alert(a)
             a = "abc";
             alert(a)*/
    
            // 定义number类型
            var num1 = 1;
            var num2 = 1.2;
            var num3 = NaN;
    
            document.write(num1 + "<br>");
            document.write(num2 + "<br>");
            document.write(num3 + "<br>");
    
            // 定义string类型
            var str1 = "abc";
            var str2 = 'd';
    
            document.write(str1 + "<br>");
            document.write(str2 + "<br>");
    
            // 定义boolean类型
            var flag = true;
            document.write(flag + "<br>");
    
            // 定义null和undefined类型
            var obj1 = null;
            var obj2 = undefined;
            var obj3;
    
            document.write(obj1 + "<br>");
            document.write(obj2 + "<br>");
            document.write(obj3 + "<br>");
        </script>
    
    </head>
    <body>
    
    
    </body>
    </html>
    View Code

      * 运算符
        * 一元运算符:只有一个运算数的运算符
          * ++、- -、正号、负号
            * ++(- -)在前,先++(- -),再运算
            * ++(- -)在后,先运算,再++(- -)
            * 注意:在JS中,如果运算数不是运算符所要求的类型,那么JS的引擎会自动的将运算数进行类型转换
              * 其他类型转number:
                * string 转 number,按照字面值转换。如果字面值不是数字,那么就会转为NaN
                * boolean 转 number,true为非零,false为零
        * 算术运算符:
          * 加减乘除,取模取余
        * 赋值运算符:
          * 等号、+=、-=
        * 比较运算符:
          * >、<、>=、<=、==、===(全等于)
          * 比较方式
            * 类型相同:直接比较
              * 字符串,按照字典顺序按位注意比较,直到得出大小结果为止
            * 类型不同:先进行类型转换,再比较
              * 字符串和数字,会先将字符串转换成数字再比较
              * === 全等于:在比较之前会先判断类型,如果类型不同就会直接返回 false
        * 逻辑运算符:
          * &&、||、!
            * &&:短路与
            * ||:短路或
            * !:非
              * 其他类型转boolean:
                * number 转 boolean:0或NaN为假,非0为真
                * string 转 boolean:空字符串为假,非空为真
                * 对象 转 boolean:所有对象都为真
                * null、undefined 转 boolean:null 和 undefined都是假
        * 三元运算符:
          * 表达式 ?值1 :值2
          * 判断表达式的值,如果是 true 则取值1,如果是 false 则取值2

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>运算符</title>
    </head>
    
    <script !src="">
        var num = +3;
        document.write(typeof num);
        num++;
        document.write(num + "<hr>");
    
        var b = +"123bc"
        document.write(b + "<hr>");
        document.write(1 + "123" + "<br>");
        document.write(1 + (+"123") + "<br>");
        document.write(1 + true + "<hr>");
        
        var a = 1;
        var b = 2;
        document.write(a + b + "<br>");
        document.write(a - b + "<br>");
        document.write(a * b + "<br>");
        document.write(a / b + "<br>");
        document.write(a % b + "<hr>");
    
        var a = 1;
        var b = 2;
        var c = "c";
        document.write((a > b) + "<br>");
        document.write((a > c) + "<hr>");
    
        var str = "";
        document.write(!!str + "<hr>");
    
        var date = new Date();
        document.write(date + "<hr>");
    
    </script>
    <body>
    
    <!--一元运算符-->
    <!--算术运算符-->
    <!--赋值运算符-->
    <!--比较运算符-->
    <!--逻辑运算符-->
    <!--三元运算符-->
    </body>
    
    </html>
    View Code

      * 流程控制语句
        * if... else... 
        * switch
          * 在Java中,switch语句可以接收的数据类型:byte、int、short、char、枚举、字符串
            * switch(变量):
              * case 值:
          * 在JS中,switch语句可以接收任意的原始数据类型
        * while
        * do ... while
        * for

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>流程控制</title>
        <script !src="">
    
            var a = 1;
            switch (typeof a) {
                case "number":
                    alert("number");
                    break;
                case "string":
                    alert("string");
                    break;
                default:
                    alert("..");
                    break
            }
    
            var ele = 0;
            var sum = 0;
            while (ele < 100) {
                sum += ++ele;
            }
            alert(sum);
    
            var sum1 = 0;
            for (var i = 0; i <= 100; i++) {
                sum1 += i;
            }
            alert(sum1);
        </script>
    
    
    </head>
    <body>
    
    
    </body>
    </html>
    View Code

      * JS特殊语法
        * 语句一般以分号结尾,如果一行只有一条语句,则分号可以省略
        * 变量的定义使用 var 关键字,也可以不使用
          * 用:定义的变量是局部变量
          * 不用:定义的变量是全局变量

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>练习</title>
    
        <style>
            td {
                border: 1px solid;
            }
        </style>
    
        <script !src="">
    
            document.write("<table  align='center'>")
            for (var a = 1; a <= 9; a++) {
                document.write("<tr>")
                for (var b = 1; b <= a; b++) {
                    document.write("<td>")
                    document.write(b + "*" + a + "=" + a * b)
                    document.write("</td>")
    
                    if (b != a) {
                        document.write("&nbsp;&nbsp;&nbsp;")
                    } else {
                        document.write("</tr>")
                    }
                }
            }
            document.write("</table>")
        </script>
    
    
    </head>
    <body>
    
    
    </body>
    </html>
    Test1

    * 基本对象
      * Function:函数对象
        * 创建:
          * var fun = new Function(形式参数列表,方法体);
          * function 方法名称(形式参数列表) {
              方法体
           }
          * var 方法名 = function(形式参数) {
              方法体
           }
        * 方法
        * 属性:
          * length:形参的个数
        * 特点:
          * 方法定义时,形参的类型不用写
          * 方法是一个对象,如果定义名称相同的方法,就会覆盖
          * 方法调用只与方法名有关,与参数列表无关
          * 在方法声明中,有一个隐藏的的内置对象(数组),arguments,封装了所有参数
          * 方法的返回值类型可以省略
        * 调用
          * 方法名称(实际参数列表);

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>基本对象</title>
    
        <script !src="">
            // Function对象:函数(方法)对象
            var fun1 = new Function("a", "b", "alert(a);");
            fun1("asd", "asd");
    
            function fun2(c) {
                alert(c)
            }
            fun2("12");
    
            var fun3 = function (d, e) {
                alert(d + e)
            };
            fun3("wd", 12);
    
            alert(fun3.length);
    
            fun3 = function (a, b, c, d) {
                alert(c);
            };
            alert(fun3.length);
            fun3(411);
    
    
            function add() {
                var sum = 0;
                for (var i = 0; i < arguments.length; i++) {
                    sum += arguments[i]
                }
                return sum
            }
    
            alert(add(1, 5, 74, 4, 5, 654, 65, 4, 432, 13, 2, 654, 64))
    
            var sum = add(10, 50)
            document.write(sum)
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code

      * Array:数组对象
        * 创建
          * var arr = new Array(元素列表);
          * var arr = new Array(默认长度);
          * var arr = [元素列表];
        * 方法
          * join():将数组元素按照传入的分隔符拼接为字符串
          * push():向数组的尾部添加元素
        * 属性
          * length:数组长度
        * 特点
          * JS中数组的类型是可变的
          * JS中数组的长度是可变的

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>数组对象</title>
    
        <script !src="">
            var arr1 = new Array(1, 2, 3);
            var arr2 = new Array(4);
            var arr3 = [1, 2, 3];
            var arr4 = new Array();
    
            document.write(arr1 + "<br>");
            document.write(arr2 + "<br>");
            document.write(arr3 + "<br>");
            document.write(arr4 + "<br>");
    
            var arr1 = [1, "a", true];
            document.write(arr1.join("--")+ "<br>");
    
            arr1.push(11);
            document.write(arr1.join("--"));
    
        </script>
    
    
    </head>
    <body>
    
    </body>
    </html>
    View Code

      * Boolean
      * Date
        * 创建
          * var date = new Date();
        * 方法
          * toLocaleString():返回当前Date对象对应的本地时间的字符串形式
          * getTime():获取当前时间到1970年的毫秒值
      * Math
        * 不需要创建,可以通过 Math.方法名() 调用
        * 方法
          * random():返回 0~1之间的随机数
          * ceil():向上取整
          * floor():向下取整
          * round():四舍五入
        * 属性
          * PI
      * Number
      * String
      * RegExp:正则表达式对象
        * 正则表达式:定义字符串的组成规则
          * 单个字符:[ ]
            * 如:[ a ] 、[ ab ] 、[ a-zA-Z0-9_ ]
            * 特殊符号代表特殊含义的单个字符:
              * d :单个数字字符[ 0-9 ]
              * w :单个单词字符[ a-zA-Z0-p_ ]
          * 量词符号:
            :表示出现0次或多次
            :表示出现0次或1次
            :出现1次或多次
            {m, n} :数量 大于等于m,小于等于n
              * m缺省:{ ,n}最多n次
              * n缺省:{m, }最少m次
          * 开始结束符
            * ^:表示表达式的开始
            * &:表示表达式的结束
        * 正则对象:
          * 创建
            * var reg = new RegExp("正则表达式");(此时的反斜线需要被转义)
            * var reg = /正则表达式/;
          * 方法
            * test():reg.test(string) 验证字符串是否符合正则定义的规范

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>正则表达式</title>
        <script !src="">
            var r1 = new RegExp("^\w{1,5}$");
            var r2 = /^w{1,5}$/
    
            // alert(r1)
            // alert(r2)
            var str = "abc"
    
            alert(r1.test(str))
            alert(r2.test(str))
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code

      * Global
        * 特点:全局对象,其中封装的方法不需要对象就可以直接调用
        * 方法:
          * encodeURI():url编码
          * decodeURI():url解码
          * encodeURIComponent():url编码,可以编码更多字符
          * encodeURIComponent():url解码
          * parseInt() :将字符串转换为数字
            * 逐一判断每一个字符是否是数字,直到不是数字为止,将数字部分转换为number
          * isNaN():判断一个值是否为NaN
            * NaN六亲不认,连自己都不认。NaN参与的 == 比较全部为false
          * eval():将JS的字符串转换为脚本代码来执行
        * URL编码:用百分号分隔每个字符的编码值

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Global</title>
    
        <script !src="">
            var str = "传智播客";
            var encodeURI1 = encodeURI(str);
            document.write(encodeURI1 + "<br>"); // %E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2
            var s = decodeURI(encodeURI1);
            document.write(s);
    
            var str = "传智播客";
            var encodeURI1 = encodeURIComponent(str);
            document.write(encodeURI1 + "<br>"); // %E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2
            var s = decodeURIComponent(encodeURI1);
            document.write(s);
    
            var str = "123abc";
            var num = parseInt(str);
    
            alert(str + 1);
            alert(num + 1);
    
            var a = NaN;
            document.write(isNaN(a));
    
            var code = "alert(123)";
            eval(code)
    
        </script>
    
    
    </head>
    <body>
    
    </body>
    </html>
    View Code

    DOM

    * 概念:Document Object Model 文档对象模型
      * 将标记语言文档的各个组成部分封装为对象,可以使用这些对象,对标记语言文档进行CRUD的动态操作

    * 功能:控制 HTML文档的内容

    * 代码:获取页面的标签(元素对象):Element
      * document.getElementById("id值"):通过id值获取元素对象

    * 操作 Element对象
      * 修改属性值
        * 明确获取的对象是哪一个
        * 查看API文档,找其中有哪些属性可以设置
      * 修改标签体内容
        * 属性:innerHTML 修改标签体的内容

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>DOM简单学习</title>
    </head>
    
    <body>
    <img src="../img/off.gif" alt="" id="light">
    <h1 id="tittle">悔创阿里杰克马</h1>
    
    <script !src="">
        // DOM控制html文档的内容
    
        var light = document.getElementById("light");
        alert("我要换图片了")
        light.src = "../img/on.gif";
    
        var tittle = document.getElementById("tittle");
        alert("我要换内容了")
        tittle.innerHTML = "不识妻美刘强东";
    
    </script>
    </body>
    </html>
    View Code

    * W3C DOM 标准被分为3个不同的部分
      * 核心 DOM - 针对任何结构化文档的标准模型
        * Document:文档对象
        * Element:元素对象
        * Attribute:属性对象
        * Text:文本对象
        * Comment:注释对象
        * Node:节点对象,其他5个的父对象
      * XML DOM - 针对XML文档的标准模型
      * HTML DOM - 针对HTML文档的标准模型

    * 核心DOM模型
      * Document
        * 创建(获取)
          * window.document
          * document
        * 方法
          * 获取 Element对象
            * getElementById():根据 id属性值获取元素,id一般唯一
            * getElementsByTagName():通过标签名称,获取元素对象们,返回值是数组
            * getElementsByClassName():通过Class的属性值,获取元素对象们,返回值是数组
            * getElementsByName():根据Name属性值,获取元素对象们,返回值是数组
          * 创建其他DOM对象
            * createAttribute()
            * createComment()
            * createElement()
            * createTextNode()
        * 属性

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document对象</title>
    </head>
    <body>
    
    <div id="div1">div1</div>
    <div id="div2">div2</div>
    <div id="div3">div3</div>
    
    <div class="cls1"> div4</div>
    <div class="cls1"> div5</div>
    
    <input type="text" name="username">
    
    <script !src="">
        var div1 = document.getElementById("div1");
    
        var divs = document.getElementsByTagName("div");
        alert(divs.length);
    
        var div_cls = document.getElementsByClassName("cls1");
        alert(div_cls.length);
    
        var ele_username = document.getElementsByName("username");
        alert(ele_username);
    
        var table = document.createElement("table");
        alert(table);
    </script>
    </body>
    </html>
    View Code

      * Element
        * 获取
          * 通过document来获取和创建
        * 方法
          * removeAttribute():删除属性
            * 参数
              * 属性名
          * setAttribute():设置属性
            * 参数
              * 属性名
              * 设置的值

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>元素对象</title>
    </head>
    
    <body>
    <a>点我试一试</a>
    <input type="button" value="设置属性" id="btn_set">
    <input type="button" value="删除属性" id="btn_remove">
    
    <script !src="">
    
        var btn1 = document.getElementById("btn_set");
        var btn2 = document.getElementById("btn_remove");
    
        btn1.onclick = function (ev) {
            var element_a = document.getElementsByTagName("a")[0];
            element_a.setAttribute("href", "https://www.baidu.com");
    
        }
    
        btn2.onclick = function (ev) {
            var element_a = document.getElementsByTagName("a")[0];
            element_a.removeAttribute("href");
        }
    
    </script>
    </body>
    </html>
    View Code

      * Node
        * 特点:所有DOM对象都可以被认为是一个节点

        * 注意:超链接标签中将 href 的属性设置为 javascript:void(0);可以使标签体在保留点击样式的同时不进行跳转
        * 方法:
          * CRUD DOM树
            * appendChild():向节点的子节点列表末尾添加新的子节点
            * removeChild():删除(并返回)当前节点的指定子节点
            * replaceChild():用新节点替换一个子节点
        * 属性
          * parentNode:返回当前节点的父节点

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>节点</title>
        <style>
            div {
                border: 1px solid red;
            }
    
            #div1 {
                 200px;
                height: 200px;
            }
    
            #div2 {
                 100px;
                height: 100px;
    
    
            }
    
        </style>
    </head>
    <body>
    
    
    <div id="div1">
        <div id="div2">
            div2
        </div>
        div1
    </div>
    
    <a href="javascript:void(0)" id="delete">删除div的子节点</a>
    <a href="javascript:void(0)" id="add">添加div的子节点</a>
    
    <script !src="">
        var del = document.getElementById("delete");
        var add = document.getElementById("add");
    
        del.onclick = function (ev) {
            var div1 = document.getElementById("div1");
            var div2 = document.getElementById("div2");
    
            div1.removeChild(div2)
        }
    
        add.onclick = function (ev) {
            var div1 = document.getElementById("div1");
            var div2 = document.getElementById("div2");
    
            var div3 = document.createElement("div");
            div3.setAttribute("id", "div3");
            div1.appendChild(div3)
        }
    
        var div2 = document.getElementById("div2");
        var div1 = div2.parentNode;
        alert(div1)
    
    </script>
    </body>
    </html>
    View Code
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>动态表格</title>
        <style>
            div {
                text-align: center;
                margin: 50px;
            }
    
            table {
                border: 1px solid;
                margin: auto;
                 500px;
            }
    
            td, th {
                text-align: center;
                border: 1px solid;
            }
    
            .over {
                background-color: pink;
            }
    
            .out {
                background-color: white;
            }
        </style>
    
    
    </head>
    
    <body>
    <div>
        <input type="text" id="id" placeholder="请输入编号">
        <input type="text" id="name" placeholder="请输入姓名">
        <input type="text" id="gender" placeholder="请输入性别">
        <input type="button" id="btn_add" value="添加">
    </div>
    
    <table>
        <caption>学生信息表</caption>
        <tr>
            <th><input type="checkbox" name="cb" id="firstCb"></th>
            <th>编号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>操作</th>
        </tr>
    
        <tr>
            <td><input type="checkbox" name="cb"></td>
            <td>1</td>
            <td>zwb</td>
            <td>男</td>
            <td><a href="javascript:void(0)" onclick="delTr(this)">删除</a></td>
        </tr>
    
        <tr>
            <td><input type="checkbox" name="cb"></td>
            <td>1</td>
            <td>zwb</td>
            <td>男</td>
            <td><a href="javascript:void(0)" onclick="delTr(this)">删除</a></td>
        </tr>
    
        <tr>
            <td><input type="checkbox" name="cb"></td>
            <td>1</td>
            <td>zwb</td>
            <td>男</td>
            <td><a href="javascript:void(0)" onclick="delTr(this)">删除</a></td>
        </tr>
    
    </table>
    
    <div>
        <input type="button" id="selectAll" value="全选">
        <input type="button" id="unSelectAll" value="全不选">
        <input type="button" id="selectRev" value="反选">
    </div>
    
    <script !src="">
        /*
        分析:
            全选:
                获取所有的checkbox
                遍历所有的checkbox,设置每一个cb的状态为选中
         */
        window.onload = function (ev) {
            document.getElementById("selectAll").onclick = function (ev1) {
                var cbs = document.getElementsByName("cb");
                for (var i = 0; i < cbs.length; i++) {
                    cbs[i].checked = true
                }
            };
    
            document.getElementById("unSelectAll").onclick = function (ev1) {
                var cbs = document.getElementsByName("cb");
                for (var i = 0; i < cbs.length; i++) {
                    cbs[i].checked = false
                }
            };
    
            document.getElementById("firstCb").onclick = function (ev1) {
                var cbs = document.getElementsByName("cb");
    
                for (var i = 0; i < cbs.length; i++) {
                    cbs[i].checked = this.checked;
    
                }
            }
        };
    
        document.getElementById("unSelectAll").onclick = function (ev1) {
            var cbs = document.getElementsByName("cb");
            for (var i = 0; i < cbs.length; i++) {
                cbs[i].checked = false
            }
        };
    
        var trs = document.getElementsByTagName("tr");
        for (var i = 0; i < trs.length; i++) {
            trs[i].onmouseover = function (ev) {
                this.className = "over";
            }
    
            trs[i].onmouseout = function (ev) {
                this.className = "out";
            }
        }
    
        document.getElementById("btn_add").onclick = function () {
            var id = document.getElementById("id").value;
            var name = document.getElementById("name").value;
            var gender = document.getElementById("gender").value;
    
            var table = document.getElementsByTagName("table")[0];
            table.innerHTML +=
                "<tr><td><input type='checkbox' name='cb'></td>" +
                "<td>" + id + "</td>" +
                "<td>" + name + "</td>" +
                "<td>" + gender + "</td>" +
                "<td><a href ="javascript:void(0)" onclick ="delTr(this)" >删除</a></td ></tr>"
    
        };
    
        function delTr(obj) {
            var table = obj.parentNode.parentNode.parentNode;
            var tr = obj.parentNode.parentNode;
    
            table.removeChild(tr)
        }
    
    </script>
    
    </body>
    </html>
    Test

    * HTML DOM
      * 标签体的设置和获取:innerHTML
      * 使用 html 对象的属性
      * 控制样式

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>控制样式</title>
    
        <style>
            #div1 {
                border: 1px solid red;
                 100px;
                height: 100px;
            }
    
            .d1 {
                border: 1px solid blue;
                 200px;
                height: 200px;
            }
    
        </style>
    
    </head>
    <body>
    <div id="div3">div</div>
    
    <div id="div1">div1</div>
    <div id="div2">div2</div>
    
    <script !src="">
        var div1 = document.getElementById("div1");
        var div2 = document.getElementById("div2");
    
        div1.onclick = function (ev) {
            div1.style.border = "1px solid red";
            div1.style.width = "200px";
            div1.style.fontSize = "20px";
        }
        div2.onclick = function (ev) {
            div2.className = "d1";
        }
    
        var div3 = document.getElementById("div3");
        div3.innerHTML += "<input type='text'>";
    </script>
    
    </body>
    </html>
    View Code

    事件

    * 概念:某些组件被执行了某些操作后,触发某些代码的执行
      * 造句: xxx 被 xxx, 我就 xxx
        * 我方水晶被摧毁后,我就责备队友
        * 敌方水晶被摧毁后,我就夸奖自己
      * 事件:某些操作。如:单机、双击、键盘按下、鼠标移动
      * 事件源:组件。如:按钮、文本输入框…
      * 监听器:代码。
      * 注册监听:将事件、事件源和监听器结合在一起。当事件源上发生某个事件,则触发执行某个监听器代码

    * 如何绑定事件
      * 直接在html标签上,指定事件的属性,属性值就是JS代码(耦合度太高)
      * 通过JS获取元素对象,指定事件属性,设置一个函数

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>DOM事件</title>
    
    </head>
    <body>
    
    <img src="../img/off.gif" alt="" onclick="fun()">
    <img src="../img/on.gif" alt="" id="light">
    
    <script !src="">
    
        function fun() {
            alert('我被点了')
        }
    
        var light = document.getElementById("light");
        light.onclick = fun
    
    </script>
    </body>
    </html>
    View Code
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>电灯开关</title>
    </head>
    <body>
    
    
    <img src="../img/off.gif" alt="" id="light">
    
    <script !src="">
        var light = document.getElementById("light");
        var flag = false;
    
        light.onclick = function () {
            if (flag == false) {
                light.src = "../img/on.gif";
                flag = true;
            } else {
                light.src = "../img/off.gif";
                flag = false;
            }
        }
    
    </script>
    </body>
    </html>
    Test2

     * 常见的事件
      * 点击事件
        * onclick:单击事件
        * ondbclick:双击事件
      * 焦点事件
        * onblur:失去焦点
          * 一般用于表单项的校验
        * onfocus:获得焦点
      * 加载事件
        * onload:一个页面或一张图像完成加载
      * 鼠标事件
        * onmousemove:鼠标被移动
        * onmouseout:鼠标从某元素移开
        * onmouseover:鼠标移动到某元素之上
        * onmousedown:鼠标按键被按下
          * 定义方法时,定义一个形参来接收event对象
          * event对象可以接收鼠标哪个键按下了
          * 事件的 button值 0 1 2 分别对应鼠标的左右键和滚轮键
        * onmouseup:鼠标按键被松开
      * 键盘事件
        * onkeydown:某个按键被按下
          * 事件的 keycode值对应具体被按下的键的编号
        * onkeyup:某个按键被松开
        * onkeypress:某个按键被按下并松开neit
      * 选中和改变
        * onchange:域的内容被改变
        * onselect:文本被选中
      * 表单事件
        * onsubmit:确认按钮被点击
          * 可以阻止表单的提交
            * 方法返回 false则表单被阻止提交
        * onreset:重置按钮被点击

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>常见事件</title>
    
        <script !src="">
            window.onload = function (ev) {
                document.getElementById("username").onblur = function (ev) {
                    alert("失去焦点了");
                };
    
                document.getElementById("username").onmouseover = function (ev1) {
                    alert("鼠标来了");
                };
    
                document.getElementById("username").onmousedown = function (ev1) {
                    alert(ev1.button);
                };
    
                document.getElementById("username").onkeydown = function (ev1) {
                    if (ev1.keyCode == 13) {
                        alert("提交表单")
                    }
                };
    
                document.getElementById("username").onchange = function (ev1) {
                    alert("改变了")
                };
    
                document.getElementById("city").onchange = function (ev1) {
                    alert("改变了")
                };
    
                document.getElementById("form").onsubmit = function (ev1) {
                    var flag = true;
                    return flag;
                }
            };
            
            function checkForm() {
                return true;
            }
        </script>
        
    </head>
    
    <body>
    
    <form action="#" id="form" onsubmit="return checkForm()">
    
        <input type="text" id="username" name="username">
        <select name="下拉列表" id="city">
            <option>--请选择--</option>
            <option>--北京--</option>
            <option>--上海--</option>
            <option>--广州--</option>
            <option>--深圳--</option>
        </select>
    
        <input type="submit" value="提交">
    </form>
    
    </body>
    </html>
    View Code
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>注册页面</title>
        <style>
            * {
                margin: 0px;
                padding: 0px;
                box-sizing: border-box;
            }
    
            body {
                background: url("../img/register_bg.png") no-repeat center;
                padding-top: 25px;
            }
    
            .rg_layout {
                 900px;
                height: 500px;
                border: 8px solid #EEEEEE;
                background-color: white;
                /*让div水平居中*/
                margin: auto;
            }
    
            .rg_left {
                /*border: 1px solid red;*/
                float: left;
                margin: 15px;
            }
    
            .rg_left > p:first-child {
                color: #FFD026;
                font-size: 20px;
            }
    
            .rg_left > p:last-child {
                color: #A6A6A6;
                font-size: 20px;
    
            }
    
            .rg_center {
                float: left;
                /* border: 1px solid red;*/
    
            }
    
            .rg_right {
                /*border: 1px solid red;*/
                float: right;
                margin: 15px;
            }
    
            .rg_right > p:first-child {
                font-size: 15px;
    
            }
    
            .rg_right p a {
                color: pink;
            }
    
            .td_left {
                 100px;
                text-align: right;
                height: 45px;
            }
    
            .td_right {
                padding-left: 50px;
            }
    
            #username, #password, #email, #name, #tel, #birthday, #checkcode {
                 251px;
                height: 32px;
                border: 1px solid #A6A6A6;
                /*设置边框圆角*/
                border-radius: 5px;
                padding-left: 10px;
            }
    
            #checkcode {
                 110px;
            }
    
            #img_check {
                height: 32px;
                vertical-align: middle;
            }
    
            #btn_sub {
                 150px;
                height: 40px;
                background-color: #FFD026;
                border: 1px solid #FFD026;
            }
    
            .error {
                color: red;
            }
    
            #td_sub {
                padding-left: 150px;
            }
        </style>
    
    </head>
    <body>
    
    <div class="rg_layout">
        <div class="rg_left">
            <p>新用户注册</p>
            <p>USER REGISTER</p>
    
        </div>
    
        <div class="rg_center">
            <div class="rg_form">
                <!--定义表单 form-->
                <form action="#" method="get" id="form">
                    <table>
                        <tr>
                            <td class="td_left"><label for="username">用户名</label></td>
                            <td class="td_right"><input type="text" name="username" id="username" placeholder="请输入用户名">
                                <span id="s_username" class="error"></span>
                            </td>
                        </tr>
    
                        <tr>
                            <td class="td_left"><label for="password">密码</label></td>
                            <td class="td_right"><input type="password" name="password" id="password" placeholder="请输入密码">
                                <span id="s_password" class="error"></span>
    
                            </td>
                        </tr>
    
                        <tr>
                            <td class="td_left"><label for="email">Email</label></td>
                            <td class="td_right"><input type="email" name="email" id="email" placeholder="请输入邮箱">
                                <span id="s_email" class="error"></span>
                            </td>
                        </tr>
    
                        <tr>
                            <td class="td_left"><label for="name">姓名</label></td>
                            <td class="td_right"><input type="text" name="name" id="name" placeholder="请输入姓名"></td>
                        </tr>
    
                        <tr>
                            <td class="td_left"><label for="tel">手机号</label></td>
                            <td class="td_right"><input type="text" name="tel" id="tel" placeholder="请输入手机号">
                                <span id="s_tel" class="error"></span>
    
                            </td>
                        </tr>
    
                        <tr>
                            <td class="td_left"><label>性别</label></td>
                            <td class="td_right">
                                <input type="radio" name="gender" value="male" checked><input type="radio" name="gender" value="female"></td>
                        </tr>
    
                        <tr>
                            <td class="td_left"><label for="birthday">出生日期</label></td>
                            <td class="td_right"><input type="date" name="birthday" id="birthday" placeholder="请输入出生日期">
                            </td>
                        </tr>
    
                        <tr>
                            <td class="td_left"><label for="checkcode">验证码</label></td>
                            <td class="td_right"><input type="text" name="checkcode" id="checkcode" placeholder="请输入验证码">
                                <img id="img_check" src="../img/verify_code.jpg">
                            </td>
                        </tr>
    
    
                        <tr>
                            <td colspan="2" id="td_sub"><input type="submit" id="btn_sub" value="注册"></td>
                        </tr>
                    </table>
    
                </form>
    
    
            </div>
    
        </div>
    
        <div class="rg_right">
            <p>已有账号?<a href="#">立即登录</a></p>
        </div>
    
    </div>
    
    
    <script !src="">
        window.onload = function (ev) {
            document.getElementById("form").onsubmit = function (ev1) {
                return checkUserName() && checkPassWord() && checkEmail() && checkTel();
            };
    
            document.getElementById("username").onblur = checkUserName;
            document.getElementById("password").onblur = checkPassWord;
            document.getElementById("email").onblur = checkEmail;
            document.getElementById("tel").onblur = checkTel;
        };
    
        function checkUserName() {
            var username = document.getElementById("username").value;
            var reg = /^w{6,12}$/;
            var flag = reg.test(username);
            var s_username = document.getElementById("s_username");
            if (flag) {
                s_username.innerHTML = "<img src='../img/gou.png' width='35' height='25'>"
            } else {
                s_username.innerHTML = "用户名格式错误"
            }
            return flag
        }
    
        function checkPassWord() {
            var password = document.getElementById("password").value;
            var reg = /^w{6,12}$/;
            var flag = reg.test(password);
            var s_password = document.getElementById("s_password");
            if (flag) {
                s_password.innerHTML = "<img src='../img/gou.png' width='35' height='25'>"
            } else {
                s_password.innerHTML = "密码格式错误"
            }
            return flag
        }
    
        function checkEmail() {
            var email = document.getElementById("email").value;
            var reg = /^([a-zA-Z]|[0-9])(w|-)+@[a-zA-Z0-9]+.([a-zA-Z]{2,4})$/;
    
            var flag = reg.test(email);
            var s_email = document.getElementById("s_email");
            if (flag) {
                s_email.innerHTML = "<img src='../img/gou.png' width='35' height='25'>"
            } else {
                s_email.innerHTML = "邮箱格式错误"
            }
            return flag
        }
    
        function checkTel() {
            var tel = document.getElementById("tel").value;
            var reg = /^1d{10}$/;
            var flag = reg.test(tel);
            var s_tel = document.getElementById("s_tel");
            if (flag) {
                s_tel.innerHTML = "<img src='../img/gou.png' width='35' height='25'>"
            } else {
                s_tel.innerHTML = "电话格式错误"
            }
            return flag
        }
    
    </script>
    </body>
    </html>
    Test

    BOM

    * 概念:Browser Object Model 浏览器对象模型
      * 将浏览器的各个组成部分封装成对象

    * 组成
      * Window:窗口对象
        * 创建
        * 方法
          * 与弹框有关的方法:
            * alert():显示带有一段消息和一个确认按钮的警告框
            * confirm():显示带有一段消息以及确认按钮和取消按钮的对话框
              * 如果点击确认按钮,则返回 true
              * 如果点击取消按钮,则返回 false
            * prompt():显示可提示用户输入的对话框
              * 返回用户输入的值
          * 与打开关闭有关的方法
            * open():打开一个新的窗口
              * 返回一个新的window对象
            * close():关闭当前窗口,默认是当前的窗口。
              * 谁调用我,我就关闭谁
          * 与定时器有关的方法
            * setTimeout():在指定的毫秒后调用函数或计算表达式(只执行1次)
              * 参数:
                * JS代码或者方法对象
                * 毫秒值
              * 返回值:唯一标识,用于取消定时器
            * clearTimeout():取消由 setTimeout() 方法设置的 timeout
            * setInterval():按照指定的周期(以毫秒计)来调用函数或计算表达式
              * 参数:
                * JS代码或者方法对象
                * 毫秒值
              * 返回值:唯一标识,用于取消定时器
            * clearInterval():取消由 setInterval() 方法指定的 timeout
        * 属性
          * 获取其他BOM对象
            * history
            * location
            * navigator
            * screen
          * 获取DOM对象
            * document
        * 特点
          * Window对象不需要创建,可以直接使用 window调用。 如:windows.方法名()
          * window引用也可以省略。 如:方法名()

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Window对象</title>
    
    
    </head>
    <body>
    
    <input type="button" value="打开窗口" id="open">
    <input type="button" value="关闭窗口" id="close">
    
    
    <script !src="">
        // window:窗口对象
        window.alert("hello"); // 警告框
        alert(confirm("confirm"));// 确认/取消对话框
    
        var text = prompt("prompt");
        document.write();
    
        var flag1 = confirm("您要退出吗?");
        var newWindow;
        if (flag1) {
            close();
        }
    
        var flag2 = confirm("您要创建新窗口吗?");
        if (flag2) {
            open();
        }
    
        var openBtn1 = document.getElementById("open");
        openBtn1.onclick = function (ev) {
            newWindow = open("https://www.baidu.com");
        }
    
        var closeBtn1 = document.getElementById("close");
        closeBtn1.onclick = function (ev) {
            newWindow.close()
        }
    
        function fun() {
            document.write("boom~");
        }
    
        // 一次性的定时器
        setTimeout("document.write('boom~')", 3000);
        var timeout = setTimeout(fun, 3000);
        clearTimeout(timeout);
        // 循环定时器
        var interval = setInterval(fun, 3000);
        clearInterval(interval);
    
    
    </script>
    </body>
    </html>
    View Code
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>图片轮播</title>
    </head>
    
    
    <body>
    <img src="../img/banner_1.jpg" alt="" width="100%" id="photo">
    
    <script !src="">
        /*
        分析:
            1、在页面上使用img标签来展示图片
            2、定义一个方法,控制图片的改变
            3、定义一个定时器,每隔3s调用方法一次
         */
        var count = 1;
    
        setInterval(fun, 3000);
    
        // 修改图片src的方法
        function fun() {
            count++;
            var photo = document.getElementById("photo");
            if (count > 3) {
                count = 1;
            }
            photo.src = "../img/banner_" + count + ".jpg";
        }
    </script>
    </body>
    </html>
    Test2

      * Navigator:浏览器对象

      * Screen:屏幕对象

      * History:历史记录对象
        * 获取
          * window.history
          * history
        * 属性
          * length:返回当前窗口历史列表中的 URL数量
        * 方法
          * back():加载 history列表中的前一个URL
          * forward():加载 history列表中的下一个URL
          * go():加载 history列表中的某个具体页面
            * 参数:
              * 正数:前进几个历史记录
              * 负数:后退几个历史记录 

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>History</title>
    
    </head>
    <body>
    
    <input type="button" value="获取历史记录个数" id="history">
    
    <a href="https://www.baidu.com">页面</a>
    
    <input type="button" value="后退" id="forward">
    <input type="button" value="前进" id="backward">
    <input type="button" value="去" id="go">
    
    <script !src="">
        var btn = document.getElementById("history");
        var forward = document.getElementById("forward");
        var backward = document.getElementById("backward");
        var go = document.getElementById("go");
    
        btn.onclick = function (ev) {
            alert(history.length)
        }
    
        forward.onclick = function (ev) {
            history.forward()
        }
    
        backward.onclick = function (ev) {
            history.back()
        }
    
        go.onclick = function (ev) {
            history.go(-1);
        }
    </script>
    </body>
    </html>
    View Code

      * Location:地址栏对象
        * 获取
          * window.location
          * location
        * 属性
          * href:设置或返回完整的URL
        * 方法
          * reload():刷新当前页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Location对象</title>
    </head>
    
    <body>
    <input type="button" value="刷新当前页面" id="flash">
    <input type="button" value="去传智播客" id="go">
    
    <script !src="">
        var flash = document.getElementById("flash");
        var go = document.getElementById("go");
    
        flash.onclick = function (ev) {
            location.reload();
            var href = location.href;
            alert(href);
        }
    
        go.onclick = function (ev) {
            location.href = "http://www.itcast.cn";
        }
    
    </script>
    </body>
    </html>
    View Code
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>自动跳转首页</title>
        <style>
            p {
                text-align: center;
            }
    
            span {
                color: red;
            }
        </style>
    </head>
    <body>
    
    <p>
        <span id="time">5</span>秒之后,自动跳转到首页
    </p>
    
    <script !src="">
        /*
        分析:
            1、显示页面效果 <p>
            2、用定时器实现倒计时读秒
         */
        var second = 5;
        var time = document.getElementById("time");
    
        function showTime() {
            time.innerHTML = second + "";
            second--;
            if (second <= 0) {
                location.href = "https://www.baidu.com"
            }
        }
    
        setInterval(showTime, 1000)
    
    </script>
    </body>
    </html>
    Test3
  • 相关阅读:
    Bundle 机制
    三次握手和四次挥手
    SparseArray
    ThreadLocal ——android消息机制handler在非主线程创建not called Looper.prepare() 错误的原因
    怎么去除重复代码
    ClassLoader
    android的四种线程池
    LeetCode#50 Pow(x, n)
    LeetCode#49 Anagrams
    LeetCode#48 Rotate Image
  • 原文地址:https://www.cnblogs.com/zhaochuming/p/12804315.html
Copyright © 2020-2023  润新知