zoukankan      html  css  js  c++  java
  • javaScript

    一、 JavaScript 概述

    1. 什么是JavaScript 

    1) JS 介绍

    简称JS,是一种浏览器解释型语言,嵌套在HTML文件中交给浏览器解释执行。主要用来实现网页的动态效果,用户交互及前后端的数据传输等。 

    2) JS 组成

    核心语法 -ECMAScript 规范了JS的基本语法

    浏览器对象模型 -BOM 
    Browser Object Model,提供了一系列操作浏览器的方法

    文档对象模型 -DOM 
    Document Object Model ,提供了一系列操作的文档的方法 

    2. 使用方式

    元素绑定事件 

    事件 :指用户的行为(单击,双击等)或元素的状态(输入框的焦点状态等)

    事件处理:元素监听某种事件并在事件发生后自动执行事件处理函数。

    常用事件:onclick (单击事件)

    语法 :将事件名称以标签属性的方式绑定到元素上,自定义事件处理。 
    html 
    <!--实现点击按钮在控制台输出--> 
    <button onclick="console.log('Hello World');">点击</button> 

    文档内嵌。使用标签书写 JS 代码 

    语法 : 
    html 
    <script type="text/javascript"> 
    alert("网页警告框"); 
    </script> 

    注意 :标签可以书写在文档的任意位置,书写多次,一旦加载到script标签就会立即执行内部的JS代码,因此不同的位置会影响代码最终的执行效果

    外部链接 

    创建外部的JS文件 XX.js,在HTML文档中使用引入 
    html 
    <script src="index.js"></script> 

    注意 :既可以实现内嵌 JS 代码,也可以实现引入外部的 JS 文件,但是只能二选一。

    JS 输入语句 

    alert(""); 普通的网页弹框

    prompt(""); 接收用户输入的弹框,返回用户输入的内容

    console.log(); 控制台输出,多用于代码调试

    document.write("Hello");实现在动态在网页中写入内容。 

    在使用事件方式写入时,会重写网页内容

    可以识别HTML标签,脚本代码可以在文档任何地方书写,如果是普通写入(不涉及事件),区分代码的书写位置,在当前位置中插入,如果是在head中嵌入,内容会作为body的首行内容显示

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            console.log("hello world");
            document.write("<h1>动态添加</h1>");
        </script>
        <!--使用src属性引入外部的JS文件-->
        <script src="index.js">
            console.log("哈哈哈");
        </script>
    </head>
    <body>
        <!--元素绑定事件
        网页弹框:
        alert("")网页警告框
        -->
        <h1 onclick="document.write('<h1>哈哈</h1>');">点击</h1>
        <!--通过script标签书写JS语句-->
        <script>
            //单行注释
            /* 多行注释 */
            console.log("控制台输出");
            //带有输入框的弹框
            //prompt("请输入姓名");
            document.write("<h1>动态添加</h1>");
        </script>
    </body>
    </html>
    View Code

    二、基础语法

    1. 语法规范

    JS是由语句组成,语句由关键字,变量,常量,运算符,方法组成.分号可以作为语句结束的标志,也可以省略

    JS严格区分大小写

    注释语法 
    单行注释使用 // 
    多行注释使用 /* */ 

    2. JS的变量与常量 

    1) 变量

    作用 : 用于存储程序运行过程中可动态修改的数据

    语法 : 使用关键var声明,自定义变量名 
    javascript 
    var a; //变量声明 
    a = 100; //变量赋值 
    var b = 200; //声明并赋值 
    var m,n,k; //同时声明多个变量 
    var j = 10,c = 20; //同时声明并赋值多个变量 

    命名规范 : 

    变量名,常量名,函数名,方法名自定义,可以由数字,字母,下划线,$组成,禁止以数字开头

    禁止与关键字冲突(var const function if else for while do break case switch return class)

    变量名严格区分大小写

    变量名尽量见名知意,多个单词组成采用小驼峰,例如:"userName"

    使用注意 : 

    变量如果省略var关键字,并且未赋值,直接访问会报错

    变量使用var关键字声明但未赋值,变量初始值为undefined

    变量省略var关键字声明,已被赋值,可正常使用.影响变量作用域 

    2) 常量

    作用 : 存储一经定义就无法修改的数据

    语法 : 必须声明的同时赋值 

    javascript 

    const PI = 3.14; 

    注意 : 

    常量一经定义,不能修改,强制修改会报错

    命名规范同变量,为了区分变量,常量名采用全大写字母

    操作小数位 

    toFixed(n); 保留小数点后 n 位 

    使用 : 

    javascript 

    var num = 3.1415926; 

    //保留当前变量小数点后两位 

    var res = num.toFixed(2);  

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            //1.变量
            var a = 100;
            var b;
            b = 10.5;
            var c = 1,d = 2,e = "hi";
            var uname,age;
            uname = "王老板";
            age = 30;
            console.log(a,b,c);
            console.log(uname);
            var gender;
            /*变量声明未赋值时,默认为undefined*/
            console.log(gender);
            /*访问未声明,未赋值的变量,会报错*/
            //console.log(m);
            /*省略var关键字定义变量,一律是全局变量*/
            n = 1000;
            console.log(n);
    
            //2.常量,一经定义就不能修改
            const PI = 3.14;
            //PI = 3.14;
    
            //自定义半径,结合常量PI,计算圆的周长和面积
            var r = 10;
            var c1 = PI * r * 2;
            var s = PI * r * r;
            //保留n位小数 toFixed(n)
            c1 = c1.toFixed(2);
            console.log(c1);
            console.log(s);
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code

    3. 数据类型 

    1) 基本数据类型(简单数据类型)

    number 数值类型

    整数 

    十进制表示 
    javascript 
    var a = 100; 

    八进制表示 
    以0为前缀 
    javascript 
    var b = 021; //结果为十进制的 17 

    十六进制 
    以0x为前缀 
    javascript 
    var c = 0x35;//结果为十进制的 53 

    使用 : 整数可以采用不同进制表示,在控制台输出时一律会按照十进制输出

    小数 

    小数点表示 
    javascript 
    var m = 1.2345; 

    科学计数法 
    例 : 1.5e3 
    e表示10为底,e后面的数值表示10的次方数 
    1.5e3 等价于 1.5 * 10(3)

    string 字符串类型 
    字符串 : 由一个或多个字符组成,使用""或''表示,每一位字符都有对应的Unicode编码

    var s = "100";

    var s1 = "张三";

    boolean 布尔类型 
    只有真和假两个值,布尔值与number值可以互相转换。true 为 1,false 为 0

    javascript 
    var isSave = true; 
    var isChecked = false; 

    undefined 
    特殊值,变量声明未赋值时显示undefined 
    javascript 
    var a; 
    console.log(a);//undefined 

    null 空类型 
    解除对象引用时使用null,表示对象为空 

    2) 引用数据类型

    主要指对象,函数等 

    3) 检测数据类型

    typeof 变量或表达式 
    typeof (变量或表达式) 

    var n = "asda";

    console.log(typeof n);//string

    console.log(typeof(n));//string 

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            //1.number
            var a = 100;
            //八进制表示整数,以0为前缀
            var b = 063;
            console.log(b);
            //十六进制表示整数,以0x为前缀
            var c = 0x63;
            console.log(c);
            var m = 1.5;
            /*科学计数法,以10为低,3表示次方数*/
            var n = 1.5e3;//1.5*10(3)
            console.log(n,typeof n);
    
            //2.string
            var s1 = "阿泽";
            var s2 = "32";
            console.log(s1,s2);
    
            //3.Boolean
            var flag = false;
            var flag2 = "false";
            console.log(flag,typeof flag,
            flag2,typeof flag2);
    
            //4.特殊值 undefined
            var k;
            console.log(k,typeof k);
    
            //5.特殊值 null
            var obj = null;
            console.log(obj,typeof obj);
    
            //typeof运算符,用于检测变量的数据类型
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code

    4. 数据类型转换

    不同类型的数据参与运算时,需要转换类型 

    1) 强制类型转换

    转换字符串类型 
    方法 : toString() 
    返回转换后的字符串 
    javascript 
    var a = 100; 
    a = a.toString(); //"100" 
    var b = true; 
    b = b.toString(); //"true" 

    转换number类型 

    Number(param) 
    参数为要进行数据类型转换的变量或值,返回转换后的结果: 
    如果转换成功,返回number值 
    如果转换失败,返回NaN,(Not a Number),只要数据中存在非number字符,一律转换失败,返回 NaN

    parseInt(param) 
    参数为要解析的数据 
    作用 : 从数据中解析整数值 
    过程 : 
    1. 如果参数为非字符串类型,会自动转成字符串 
    2. 从左向右依次对每一位字符转number,转换失败则停止向后解析,返回结果

    parseFloat(param) 
    作用 : 提取number值,包含整数和小数部分 

    2) 隐式类型转换(自动转换)

    当字符串与其他数据类型进行"+"运算时,表示字符串的拼接,不再是数学运算 
    转换规则 :将非字符串类型的数据转换成字符串之后进行拼接,最终结果为字符串

    其他情况下,一律将操作数转number进行数学运算 

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            //1.强制类型转换
            //1)转字符串
            var a = 100;
            var b = true;
            var a1 = a.toString();
            var b1 = b.toString();
            console.log(a1,typeof a1);
            console.log(b1,typeof b1);
    
            //2)转number
            /*整体转number,使用Number()*/
            var s1 = "101";
            var s2 = "101a";
            var s3 = true;
            var s4 = "true";
            var s5 = null;
            var s6;
            console.log(Number(s1),s1);
            console.log(Number(s2),s2);
            console.log(Number(s3),s3);
            console.log(Number(s4),s4);
            console.log(Number(s5),s5);
            console.log(Number(s6),s6);
    
            /*提取字符串中的number部分:
            parseInt(n)
            parseFloat(n)
            */
            console.log(parseInt(35.5));
            console.log(parseInt("35.5"));
            console.log(parseInt("35a"));
            console.log(parseInt("a35.5"));
            console.log(parseInt(true));
            console.log(parseInt("true"));
            console.log(parseFloat("35.5.6"));
    
            //3)转Boolean
            /*除"零"值以外,其他数据都为真,只有"零"值为假*/
            console.log(Boolean(1));
            console.log(Boolean("1"));
            console.log(Boolean(" "));
            console.log(Boolean("0"));
            /*以下为"零"值*/
            console.log(Boolean(0));
            console.log(Boolean(0.0));
            console.log(Boolean(""));
            console.log(Boolean(null));
            console.log(Boolean(undefined));
            console.log(Boolean(NaN));
    
            //2.自动类型转换(以数学运算为例:+ - * / %)
            var r1 = "小泽" + "Maria";
            var r2 = "小泽" + 31;//"小泽31"
            var r3 = "小泽" + true;//"小泽true"
            var r4 = "小泽" + null;
            var r5 = "小泽" + undefined;
            var r6 = "小泽" + NaN;
            console.log(r4,r5,r6)
            var r7 = "小泽" + 5 + 10;//
            var r8 = 10 + 5 + "小泽";//"15小泽"
    
            //其他情况
            /*
                "100" + "5"
                "100" - 5
                "100" - "5"
                "100" - true
                "100a" - 5
                "100a" - true
                "100" - "true"
                "100" + "true"
                true + 100
                true + true
                100 + null
                100 + undefined
                100 + NaN
            */
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code

    5. 运算符 

    1) 赋值运算符

    = 将右边的值赋给左边变量 

    2) 算数运算符

    + - * / %  加 减 乘 除 取余 

    3) 符合运算符

    += -= *= /= %= 

    4) 自增或自减运算符

    ++ -- 变量的自增和自减指的是在自身基础上进行 +1或-1 的操作
    

    注意: 
    + 自增或自减运算符在单独与变量结合时,放前和放后没有区别 
    + 如果自增或自减运算符与其他运算符结合使用,要区分前缀和后缀,做前缀,那就先++/--,再进行赋值或其他运算,如果做后缀,就先结合其他运算符,再进行++ / -- 

    5) 关系运算符/比较运算符

    > < 
    >= <=
    ==(相等) !=(相等)
    ===(全等) !==(不全等)
    

    1. 关系运算符用来判断表达式之间的关系,结果永远是布尔值 true/false 
    2. 使用 
    + 字符串与字符串之间的比较 
    依次比较每位字符的Unicode码,只要某位字符比较出结果,就返回最终结果 
    + 其他情况 
    一律将操作数转换为number进行数值比较,如果某一操作数无法转换number,则变成NaN参与比较运算,结果永远是false 
    3. 相等与全等 
    + 相等 : 不考虑数据类型,只做值的比较(包含自动类型转换) 
    + 全等 : 不会进行数据类型转换,要求数据类型一致并且值相等才判断全等 

    6) 逻辑运算符

    && 逻辑与 
    表达式同时成立,最终结果才为true;全1则1

    || 逻辑或 
    表达式中只要有一个成立,最终结果即为true; 有1则1

    ! 逻辑非 
    对已有表达式的结果取反 
    注意 : 除零值以外,所有值都为真 

    7) 三目运算符

    语法 :

     表达式1 ? 表达式2 : 表达式3; 

    过程 : 
    判断表达式1是否成立,返回布尔值 
    如果表达式1成立,执行表达式2; 
    如果表达式1不成立,执行表达式3; 

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script src=""></script>
        <script>
            var a = 100;
            var r1 = a + 10;
            a *= 5;// a = a * 5;
            //1.自增和自减 ++ --
            var b = 10;
            //单独与变量结合,前缀和后缀没有区别
            b++;
            ++b;
            console.log(b);//12
            //与其他运算符结合使用
            var r2 = b++;
            console.log(r2,b);
            var r3 = ++b;
            console.log(r3,b);
            var c = 10;
            var r4 = --c;//r4=9,c=9
            var r5 = c--;//r5=9,c=8
    
            //自增和自减运算的结果永远number值
            var s = true;
            s++;
            console.log(s,typeof s);
    
            //思考 r? n?
            var n = 5;
            var r = n++ + ++n + n++ + ++n + n;
            console.log(r,n);
            /*
                r = r1 + r2 + r3 + r4 + r5;
                r1 = n++; //5 6
                r2 = ++n; //7 7
                r3 = n++; //7 8
                r4 = ++n; //9 9
                r5 = n;   //9
            */
    
            //2.关系运算
            var res1 = 10 > 2;
            var res2 = "210" > "2";//'1' > (null)
            console.log(res1,res2);
            var res3 = "小泽" > "超哥哥";
            var s1 = "";
            var s2 = "";
            //获取字符的Unicode编码charCodeAt(index)
            console.log(s1.charCodeAt(),s2.charCodeAt(),res3);
    
            var res4 = "10" > 2;//10 > 2
            var res5 = "10" > true;//10 > 1
            var res6 = true > false;//1 > 0
            var res7 = "10" > undefined;//10 > NaN ->false
            var res8 = "10" > null;//10 > 0
            var res9 = "true" > false;//NaN > 0
    
            //相等和全等
            var r1 = 10 == "10";
            var r2 = 10 === "10";
            console.log(r1,r2);
    
            //3.逻辑运算符
            /*给出闰年判断的条件:
            能被4整除并且不能被100整除
            能被400整除
            */
            var year = prompt("请输入年份");
            var r = year%4==0&&year%100!=0 || year%400==0;
            console.log(year,typeof year,r);
            //逻辑非:对布尔值取反
            var r1 = !5;//false
            //逻辑非的优先级高于关系运算
            var r2 = !5 < 3;//false < 3
            console.log(r1,r2);
    
            //3.三目运算符
            var a = 10;
            if(a > 5){
                console.log("成立");
            }else{
                console.log("不成立");
            }
            var res = a>5 ? "OK" : "error";
            console.log(res);
            a = 3;
            var res2 = a>5? "OK" : a>=3 ? ">=3" : "小于3";
            console.log(res2);
        </script>
    </head>
    <body>
        <h1 onclick=""></h1>
    </body>
    </html>
    View Code
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            /*
                接收用户输入的身高(m)和体重(kg)
                计算bmi = 体重/(身高 *身高)
                对bmi保留1位小数
                并且判断身体指数:
                    bmi < 18.5 "太瘦了"
                    18.5 ~ 23.9 "健康"
                    bmi > 23.9 "注意身体健康"
            */
            var w = prompt("请输入体重(kg)");
            var h = prompt("请输入身高(m)");
            var bmi = w / (h * h);
            var bmi2 = bmi.toFixed(1);
            //console.log(bmi,bmi2,typeof bmi2);
            var r = bmi2>23.9? "注意": bmi2>=18.5 ? "健康" : "太瘦";
            console.log(bmi2,r)
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code

    一、流程控制 

    1. 作用

    控制代码的执行顺序 

    2. 分类 

    1) 顺序结构

    从上到下依次执行代码语句 

    2) 分支/选择结构 

    1. if语句

    简单if结构 
    text 
    if(条件表达式){ 
    表达式成立时执行的代码段 


    注意 : 除零值以外,其他值都为真,以下条件为假值false 
    javascript 
    if(0){} 
    if(0.0){} 
    if(""){} //空字符串 
    if(undefined){} 
    if(NaN){} 
    if(null){} 

    特殊写法 : 
    { }可以省略,一旦省略,if语句只控制其后的第一行代码

    if - else结构 
    text 
    if(条件表达式){ 
    //条件成立时执行 
    }else{ 
    //条件不成立时选择执行 

    多重分支结构

    if(条件1){

    //条件1成立时执行

    }else if(条件2){

    //条件2成立时执行

    }else if(条件3){

    //条件3成立时执行

    }...else{

    //条件不成立时执行

    } 

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            //1.if语句
            var a = 10;
            if(a < 5){
                console.log("成立");
            }
            if(a < 5) console.log("a>5");
            console.log("测试");
            //2.if-else语句
            if(a == 0){
    
            }else{
    
            }
            //3.if-else if语句
            var bmi = 20.5;
            if(bmi > 23.9){
    
            }else if(bmi >= 18.5){
    
            }else{
    
            }
            /*
                接收用户输入的年,月,日
                计算当日是该年的第几天*/
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            var year = prompt("");
            var month = prompt("");
            var day = Number(prompt(""));
            var sum = 0;
            //整月天数累加,当前月天数累加
            if( month == 1){
                sum = day;
            }else if(month == 2){
                sum = 31 + day;
            }else if(month == 3){
                sum = 31 + 28 + day;
            }
            //闰年判断(year ,month > 2)
            console.log(sum);
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code

    2. switch语句

    语法 : 

    switch(value){

    case 1 :

    //value与值1匹配全等时,执行的代码段

    break; //结束匹配

    case 2 :

    //value与值2匹配全等时,执行的代码段

    break;

    case 3 :

    //value与值3匹配全等时,执行的代码段

    break;

    default:

    //所有case匹配失败后默认执行的语句

    break;

    }

    使用 : 

    1. switch语句用于值的匹配,case用于列出所有可能的值;只有switch()表达式的值与case的值匹配全等时,才会执行case对应的代码段

    2. break用于结束匹配,不再向后执行;可以省略,break一旦省略,会从当前匹配到的case开始,向后执行所有的代码语句,直至结束或碰到break跳出

    3. default用来表示所有case都匹配失败的情况,一般写在末尾,做默认操作

    4. 多个case共用代码段

    case 1:

    case 2:

    case 3:

    //以上任意一个值匹配全等都会执行的代码段 

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
        /*
            var week = Number(prompt("请输入0~6之间的数字"));
            switch(week){
                case 0: //0 === 0
                    //变量值与case列举的值匹配全等时执行的代码段
                    console.log("星期日");
                    //break;
                case 1:
                    console.log("星期一");
                    //break;
                default:
                    console.log("请输入合法值");
            }
            */
            //多个case共用代码段
            var month = Number(prompt("请输入月"));
            switch(month){
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    console.log("31天");
                    break;
                case 2:
                    console.log("28天");
                    break;  }
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            var year = prompt("");
            var month = prompt("");
            var day = Number(prompt(""));
            var sum = 0;
            //1.整月天数的累加
            switch(month-1){//整月最多取到11月
                //省略break会从当前匹配的case开始向后执行所有代码语句
                case 11:
                    sum += 30;
                case 10:
                    sum += 31;
                case 9:
                    sum += 30;
                case 8:
                    sum += 31;
                case 7:
                    sum += 31;
                case 6:
                    sum += 30;
                case 5:
                    sum += 31;
                case 4:
                    sum += 30;
                case 3:
                    sum += 31;
                case 2:
                    sum += 28;
                    if(year%4==0&&year%100!=0 || year%400==0){
                        sum++;
                    }
                case 1:
                    sum += 31;
            }
            //2.当前月天数的累加
            sum += day;
            console.log(sum);
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code

    3. 循环结构

    作用 
    根据条件,重复执行某段代码

    分类 

    while循环 

    定义循环变量;

    while(循环条件){

    条件满足时执行的代码段

    更新循环变量;

    }

    代码:

    var i=1;

    var sum=0;

    while(i<101){

    //循环体

    console.log(i)

    //更新循环变量

    sum+=i

    i++;

    }

    console.log(sum)

    do-while循环 

    do{

    循环体;

    更新循环变量

    }while(循环条件);

    代码:

    //循环输出100次

    var i=1;

    do{

    console.log("do");

    //更新循环变量

    i++;}while(i<101)

    与while循环的区别 : 对于不确定循环次数while循环使用的比较多; 

    + while循环先判断循环条件,条件成立才执行循环体 

    + do-while循环不管条件是否成立,先执行一次循环体

    for循环 

    for(定义循环变量;循环条件;更新循环变量){

    循环体;

    }

    代码:

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

    //循环体

    console.log("js真棒");

    if(i==5){

    break;}

    console.log("---------")

    }

    循环控制 : 

    1. break 强制结束循环 

    2. continue 结束当次循环,开始下一次循环 

    循环嵌套 : 

    在循环中嵌套添加其他循环 

    /*控制台输出9*9乘法表*/

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

    var show="";

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

    show+=i+"*"+j+"="+i*j+" ";

    }

    //按照行输出

    console.log(show);

    }

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            //循环变量
            var i = 1;
            var sum = 0;
            while(i<101){
                //循环体
                console.log(i);
                sum += i;
                //更新循环变量
                i++;
            }
            console.log(sum);
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            var year = prompt("");
            var month = prompt("");
            var day = Number(prompt(""));
            var sum = 0;
            //1.整月天数的累加
            var i = 1;
            while(i < month){ //1~month-1
                switch(i){
                    case 1:
                    case 3:
                    case 5:
                    case 7:
                    case 8:
                    case 10:
                        sum += 31;
                        break;
                    case 4:
                    case 6:
                    case 9:
                    case 11:
                        sum += 30;
                        break;
                    case 2:
                        sum += 28;
                        if(year%4==0&&year%100!=0 || year%400==0){
                            sum++;
                        }
                }
                i++;
            }
            //2.当前月天数的累加
            sum += day;
            console.log(sum);
    
            /*
            switch(i==1){
                case true
            }
            */
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            //循环输出一百次""
            var i = 101;
            do{
                console.log("超哥哥最帅");
                //更新循环变量
                i++;
            }while(i < 101);
            i = 101;
            while(i < 101){
                console.log("小泽老师最美");
                i++;
            }
    
            for(var i = 1;i < 101;i++){
                //循环体
                console.log("老祁的B-box真棒");
            }
            /*控制循环体的执行:break/continue*/
            for(var i = 1; i < 11;i++){
                console.log(i);
                if(i == 5){
                //一旦执行break,循环体中后面的代码都不执行
                    continue;
                }
                console.log("-------------");
            }
            /*循环接收用户输入,并且在控制台输出;直至用户
            输入"exit"表示退出*/
            /*
            while(true){
                var input = prompt("请输入");
                if(input == "exit"){
                    //结束循环
                    break;
                }
                console.log(input);
            }
            */
            /*
            var input;
            do{
                input = prompt("请输入");
                if(input != "exit")
                    console.log(input);
            }while(input != "exit")
            */
    
            /*
                控制台输出乘法表(循环嵌套)
                1 * 1
            */
            for(var i = 1; i <= 9; i++){
                var show = "";
                for(var j = 1; j <= i;j++){
                //制表符 	
                    show += i + "*" + j + "=" + i*j + "	";
                }
                //按行输出
                console.log(show);
            }
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code

    一、函数 

    1) 作用

    封装一段待执行的代码 

    2)语法 

    //函数声明

    function 函数名(参数列表){

    函数体

    return 返回值;

    }

    //函数调用

    函数名(参数列表); 

    3)使用

    函数名自定义,见名知意,命名规范参照变量的命名规范。普通函数以小写字母开头,用于区分构造函数(构造函数使用大写字母开头,定义类) 

    4)匿名函数

    匿名函数:省略函数名的函数。语法为: 
    + 匿名函数自执行 

    语法:

    (function (形参){

    })(实参);

    代码:

    //匿名函数自执行:(函数声明)(实参)

    (function(){

    var a=100;

    //构建局部作用域,运行结束即回收

    console.log("匿名函数",a)

    })()

    定义变量接收匿名函数 

    var fn = function (){};

    fn(); //函数调用 

     

    5)作用域

    JS中作用域分为全局作用域和函数作用域,以函数的{ }作为划分作用域的依据 
    1. 全局变量和全局函数 
    + 只要在函数外部使用var关键字定义的变量,或函数都是全局变量和全局函数,在任何地方都可以访问 
    + 所有省略var关键字定义的变量,一律是全局变量 
    2. 局部变量/局部函数 
    + 在函数内部使用var关键字定义的变量为局部变量,函数内部定义的函数也为局部函数,只能在当前作用域中使用,外界无法访问 
    3. 作用域链 
    局部作用域中访问变量或函数,首先从当前作用域中查找,当前作用域中没有的话,向上级作用域中查找,直至全局作用域 

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            //1.无参数无返回值的函数
            //函数声明
            function f1(){
                console.log("f1被调用");
            }
            //函数调用
            f1();
            //2.带有参数的函数
            //JS允许形参与实参个数不匹配
            function f2(a,b){//形参未传值,默认为undefined
                console.log(a * a,b);
                //函数内部可以使用arguments获取实际传递的参数
                console.log(arguments);
            }
            f2(5);//函数调用时将实际参数赋值给形式参数
            //3.带有返回值的函数
            function f3(a){
                //局部变量r1,只能在当前函数中使用
                var r1 = a * a;
                var r2 = a + a;
                //将函数内部的变量传递 给外界使用
                //只能返回一个值,后面的代码都不执行
                return r1,r2;
                console.log("函数使用");
            }
            //全局变量r1
            var r1 = f3(10);
            console.log(r1);
    
            //全局变量与局部变量
            /*
               全局变量:
                1.函数体外部声明的变量一定是全局变量
                2.一切省略var关键字创建的变量都是全局变量
               局部变量:
                在函数内部使用var关键字创建的变量为局部变量
            */
            var age = 18;
            function fn(){
                var age  = 28;
                uname = "老王";
                //就近访问当前作用域中的变量
                console.log(age);
            }
            fn();
            console.log(age,uname);
            /*
                使用函数封装日期计算:
                闰年判断封装成函数;
                主体功能封装成函数,通过按钮点击调用
                <button onclick="fn()">
            */
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            //闰年判断
            function isRun(y){
                var r = y%4==0&&y%100!=0 || y%400==0;
                return r;
            }
            //主函数
            function show(){
               var year = prompt("请输入年");
               console.log(isRun(year));
            }
        </script>
    </head>
    <body>
        <button onclick="show()">日期计算</button>
    </body>
    </html>
    View Code
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            //匿名函数的使用,自执行: (匿名函数声明)(实参)
            (function (){
                var a = 100;
                //构建局部作用域
                console.log("匿名函数自执行",a);
            })()
            //定义变量接收匿名函数
            var fn = function (){
                console.log("fn被调用");
            };
            fn();
            console.log(fn);
            //函数作为参数
            function show (f){
                console.log("show:",f);
                f();
            }
            //直接传递函数名
            show(fn);//f = fn
            //匿名函数作为参数传递
            show(function (){
                console.log("直接传递匿名函数");
            })//f = function (){}
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code

    二、 内置对象

     1) 对象 
    对象是由属性和方法组成的,使用点语法访问 
    2) Array 数组 
     1. 创建 

    方式一:

    //1、数组的创建

    var arr1=["小马",20,true];

    console.log(arr1);

    方式二:

    //使用new关键字创建

    var arr2=new Array("则",27,false);

    console.log(arr2)

    2. 特点 
    + 数组用于存储若干数据,自动为每位数据分配下标,从0开始 
    + 数组中的元素不限数据类型,长度可以动态调整 
    + 动态操作数组元素 :根据元素下标读取或修改数组元素,arr[index] 

    3. 属性和方法

    属性 : length 表示数组长度,可读可写 

    方法 : 

    push(data) 
    在数组的末尾添加一个或多个元素,多个元素之间使用逗号隔开 
    返回添加之后的数组长度 

    pop() 
    移除末尾元素 
    返回被移除的元素 

    unshift(data) 
    在数组的头部添加一个或多个元素 
    返回添加之后的数组长度 

    shift() 
    移除数组的第一个元素 
    返回被移除的元素 

    toString() 

    s1=arr.toString() 
    console.log(s1)

    将数组转换成字符串类型 
    返回字符串结果

    join(param) 
    将数组转换成字符串,可以指定元素之间的连接符,如果参数省略,默认按照逗号连接 
    返回字符串

    s2=arr.join("") 
    console.log(s2) 

    reverse() 
    反转数组,倒序重排 
    返回重排的数组,注意该方法直接修改原数组的结构 

    sort() 
    对数组中元素排序,默认按照Unicode编码升序排列 
    返回重排后的数组,直接修改原有数组 
    参数 : 可选,自定义排序算法 

    例: 

    //自定义升序

    function sortASC(a,b){

    return a-b;

    }

    代码:

    arr.sort(function(e1,e2){

    return e1.age-e2.age;

    })

    console.log(arry)

    作用:作为参数传递到sort()中,会自动传入两个元素进行比较,如果a-b>0,交换元素的值,自定义升序排列 ```javascript //自定义降序 function sortDESC(a,b){ return b-a; } //如果返回值>0,交换元素的值,b-a表示降序排列 ``` + forEach(param) 遍历数组元素 参数为函数

    例 : 

    arr.forEach(function (elem,index){

    //forEach()方法会自动调用匿名函数,依次传入元素及下标

    });  

     

    4. 二维数组

    数组中的每个元素又是数组 

    var arr1 = [1,2,3];

    var arr2 = [[1,2],[3,4],[5,6,7]];

    //操作数组元素

    var r1 = arr2[0] //内层数组

    var num = r1[0]; //值 1

    //简写

    var num2 = arr2[1][0]; 

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            //1.数组的创建
            var arr1 = ["超哥哥",30,true];
            console.log(arr1);
            //使用new关键字创建
            var arr2 = new Array("小泽",31,false);
            console.log(arr2);
            //特殊
            var arr3 = [5];
            //使用new关键字传递一个整数参数创建数组,代表初始化数组长度
            var arr4 = new Array(5);
            console.log(arr3,arr4);
            //2.操作数组元素(根据元素索引)
            console.log(arr3[0]);
            arr4[0] = "老祁";
            arr4[2] = "大旭";
            arr4[8] = "AI";
            console.log(arr4);
            //3.数组对象的属性:length
            console.log(arr4.length);
            //4.遍历数组元素
            //创建数组,包含若干元素,实现数组元素的正序遍历和倒序遍历
            var arr5 = [1,2,3,4,5];
            //普通for循环
            for(var i = 0;i < arr5.length;i++){
                console.log(arr5[i]);
            }
            for(var i = arr5.length-1;i >= 0;i--){
                console.log(arr5[i]);
            }
            console.log("-------------------------");
            //for-in循环
            for( var i in arr5){
                console.log(i,arr5[i]);
            }
            //数组对象提供的遍历方法,forEach(function (){})
            arr5.forEach(function (elem,index){
                console.log("-----:",elem);
            });
            /*
            1.循环接收用户输入,将数据存储在数组中,直至输入"exit"结束,
            控制台打印数组
            2.声明包含若干元素的数组,打印数组中的最大值
    
            */
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            function saveData(){
                var arr = [];
                while(true){
                    var input = prompt("请输入");
                    if(input == "exit"){
                        break;
                    }
                    //添加至数组,数组长度表示数组中下一个元素的索引
                    arr[arr.length] = input;
                }
                console.log(arr);
            }
            //遍历数组取最大值
            function showMax(){
                //数据源
                var arr = [10,5,66,78,9,56,3,-90,0];
                var max = arr[0];
                for(var i = 0;i < arr.length;i++){
                    if(arr[i] > max){
                        max = arr[i];
                    }
                }
                console.log(max);
            }
            //showMax();
            /*定义数组,接收用户输入的内容,查询数组中是否存在相应元素
            如果存在返回对应元素的下标,不存在返回-1*/
            function findIndex(){
                //数据源
                var arr = [10,5,66,10,78,9,56,3,-90,0,10];
                //var arrInd = [];
                var data = prompt("请输入要查找的数值");
                var index = -1;
                /*
                //查找元素第一次出现的下标
                for(var i = 0;i < arr.length;i++){
                    if(arr[i] == data){
                        index = i;
                        break;
                    }
                }
                */
                //查找元素最后一次出现的下标
                for(var i = arr.length-1;i >= 0;i--){
                    if(arr[i] == data){
                        index = i;
                        break;
                    }
                }
                console.log(data,index,arr);
            }
            findIndex();
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            //1.操作数组的头尾元素
            var arr = ["hello","world"];
            var r1 = arr.push(1,2,3);
            console.log(r1,arr);
            var r2 = arr.pop();
            console.log(r2,arr);
            var r3 = arr.unshift(10);
            r3 = arr.unshift(20,30);
            console.log(r3,arr);
            var r4 = arr.shift();
            console.log(r4,arr);
            //2.转换字符串
            var r5 = arr.toString();
            var r6 = arr.join("");
            console.log(r5);
            console.log(r6);
            console.log(arr);
            //3.数组反转(倒序重排)
            arr.reverse();//调整原有数组的结构
            console.log(arr);
            //4.数组排序(对数组原有结构的调整)
            //默认按照字符的Unicode编码升序排列
            arr.sort();
            console.log(arr);
            //对number值进行大小排列
            arr.sort(function (a,b){
                /*a,b代表数组中相邻的两个元素,如果a-b>0,则交换
                元素的位置*/
                //自定义升序
                return a-b;
            })
            console.log(arr);
            //自定义降序
            function sortDESC(a,b){
                //如果b-a>0,则交换两个元素的位置
                return b-a;
            }
            arr.sort(sortDESC);
            console.log(arr);
            /*复杂数组*/
            var obj = {
                uid:001,
                uname:"大旭",
                play:function (){
                    console.log("play");
                }
            };
            console.log(obj.uid);
            obj.play();
            var array = [
            {uname:"大旭",age:35},
            {uname:"超哥哥",age:33},
            {uname:"小泽",age:31}
            ];
            console.log(array[0].age);
            //将数组元素按照年龄升序排列
            array.sort(function (e1,e2){
                return e1.age-e2.age;
            })
            console.log(array);
            /*代码实现十进制转二进制:
            除2取余,直至商为0;余数倒序排列
            6 / 2 = 3 ... 0
            3 / 2 = 1 ... 1
            1 / 2 = 0 ... 1
            */
            function decode(){
                var num = prompt("请输入数字");
                var arr = [];
                while(num != 0){
                    arr.unshift(num % 2);
                    num = parseInt(num / 2);
                }
                console.log(arr.join(""));
            }
            decode();
    
            //二维数组
            var arr = [
            [1],
            [2,3],
            [4,5,6]
            ];
            console.log(arr[2][1]);
            //二维数组的遍历
            for(var i in arr){
                for(var j in arr[i]){
                    console.log(arr[i][j]);
                }
            }
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code

    3)String 对象 

    1. 创建 

    var str = "100";

    var str2 = new String("hello"); 

    2. 特点

    字符串采用数组结构存储每位字符,自动为字符分配下标,从0开始 

    3. 属性

    length :获取字符串长度 

    4. 方法 

    转换字母大小写 
    toUpperCase() 转大写字母 
    toLowerCase() 转小写字母 
    返回转换后的字符串,不影响原始字符串 

    获取字符或字符编码 
    charAt(index) 获取指定下标的字符 
    charCodeAt(index) 获取指定下标的字符编码 
    参数为指定的下标,可以省略,默认为0 

    获取指定字符的下标 

    indexOf(str,fromIndex) 
    作用 : 获取指定字符的下标,从前向后查询,找到即返回,找到第一次出现的次数。 
    参数 : 
    str 表示要查找的字符串,必填 
    fromIndex 表示起始下标,默认为0 
    返回 : 
    返回指定字符的下标,查找失败返回-1 

    console.log(s2.indexOf("o"))

    + lastIndexOf(str,fromIndex)

    作用 : 获取指定字符最后一次出现的下标,从后向前查找,找到即返回 参数 : str 必填,表示要查找的内容 fromIndex 选填,指定起始下标 

    console.log(s2.lastIndexOf("o"))

    截取字符串 
    substring(startIndex,endIndex) 
    作用 : 根据指定的下标范围截取字符串,startIndex ~ endIndex-1 
    参数 : 
    startIndex 表示起始下标 
    endIndex 表示结束下标,可以省略,省略表示截止末尾 

    console.log(s2.substring(1,4))

    分割字符串 
    split(param) 
    作用 : 将字符串按照指定的字符进行分割,以数组形式返回分割结果 
    参数 : 指定分隔符,必须是字符串中存在的字符,如果字符串中不存在,分割失败,仍然返回数组

    模式匹配 
    作用 : 借助正则表达式实现字符串中固定格式内容的查找和替换 
    正则表达式 : 
    var reg1 = /字符模式/修饰符; 
    修饰符 : 
    i : ignorecase 忽略大小写 
    g : global 全局范围 
    字符串方法 :

    match(regExp/subStr) 
    作用 : 查找字符串中满足正则格式或满足指定字符串的内容 
    返回 : 数组,存放查找结果

    replace(regExp/subStr,newStr) 
    作用 : 根据正则表达式或字符串查找相关内容并进行替换 
    返回 : 替换后的字符串,不影响原始字符串 

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            //1.创建
            var s1 = "小泽";
            var s2 = new String("大旭老师");
            console.log(s1,s2);
            //2.字符串按照数组结构存储,可以使用数组方法操作字符
            console.log(s1[1],s2[0]);
            //遍历字符串
            for(var i = 0;i < s2.length;i++){
                console.log(s2[i]);
            }
            //3.字符串方法
            //3.1转换大小写字母
            var s3 = "Maria";
            var r1 = s3.toUpperCase();
            var r2 = s3.toLowerCase();
            console.log(r1,r2,s3);
            //3.2获取指定下标对应的字符或字符编码
            var r3 = s3.charAt();
            var r4 = s3.charCodeAt();
            console.log(r3,r4);
            //3.3获取指定字符的下标
            //"Maria"
            var r5 = s3.indexOf("a",2);
            var r6 = s3.lastIndexOf("b",2);
            console.log(r5,r6);
            //3.4截取字符串substring(start,end)
            //截取范围start~end-1
            var r7 = s3.substring(0,2);
            console.log(r7);
            //3.5分割字符串
            var r8 = s3.split("/");
            console.log(r8);
            //3.6模式匹配
            var str = "上知乎,搜知乎,问知乎,答知乎";
            //match(param),返回结果数组
            var res1 = str.match("知乎");
            console.log(res1);
            //定义正则,表示查找内容
            var regexp = /d{6,10}/ig;
            var reg2 = /知乎/g;
            var res2 = str.match(reg2);
            console.log(res2);
            //replace()查找并替换,返回替换后的字符串结果
            var res3 = str.replace(reg2,"新浪");
            console.log(res3,str);
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            /*
            1.接收用户输入的邮箱,提取用户名和服务商
                "zhangsan@163.com"
            2.从身份证号中提取年月日信息
                "100100190012120123"
            3."101_5&201_7&301_9"
                商品id为101,数量为5
            */
            //1.提取用户名和服务商
            var mail = "lvze@tedu.cn";
            //方法1:截取
            var index = mail.indexOf("@");
            var username = mail.substring(0,index);
            //省略结束下标,表示截取至末尾
            var servername = mail.substring(index+1);
            console.log(username,servername);
    
            //方法2:使用@符号分割字符串
            var res = mail.split("@");
            console.log(res[0],res[1]);
    
            //2.提取身份证号中的年月日
            var uid = "100100190012100123";
            var year = uid.substring(6,10);
            var month = uid.substring(10,12);
            var day = uid.substring(12,14);
            console.log(year,month,day);
    
            //3.分割商品信息
            var str = "101_5&201_7&301_9";
            var arr = str.split('&');//["101_5","",""]
            for(var i=0; i<arr.length;i++){
                var arr2 = arr[i].split('_');//["101","5"]
                console.log("商品id为:",arr2[0],"商品数量为:",arr2[1]);
            }
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            /*
            模拟验证码:
            1.创建数据源(由大小写字母和数字组成)
            2.随机取四位字符,拼成验证码
                随机数:Math.random()返回[0,1)之间的随机小数
                调整为随机下标
            3.提示用户输入(不区分大小写)
            4.比较用户输入的内容,给出验证结果
            */
        </script>
    </head>
    <body>
    
    </body>
    </html>
    View Code
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <a href="04_history.html">页面0</a>
        <a href="01_window.html">页面二</a>
        <button onclick="console.log(history.length)">
            获取length
        </button>
        <button onclick="history.back()">返回</button>
        <button onclick="history.forward()">前进</button>
    
    
        <input type="text" id="uinput">
        <span id="code"></span>
        <button id="btn">验证</button>
        <script>
            //元素的id属性值作为变量直接操作,存储元素对象本身
            console.log(code);
            //生成四位验证码
            var str = "ABCDEFGHIabcdefghtyuiu0123456789";
            var show = "";
            for(var i = 1; i < 5; i++){
                //生成随机下标
                //Math.floor(n)
                var index = Math.floor(Math.random()*str.length);
                show += str[index];
            }
            //操作元素内容
            code.innerHTML = show;
            //动态绑定事件
            btn.onclick = function (){
                //获取输入框的值
                console.log(uinput.value);
                //验证
                if(uinput.value.toUpperCase() == show.toUpperCase()){
                    alert("输入正确")
                }else{
                    alert("输入有误");
                }
            };
    
            /*Math对象*/
            //1.向上取整:舍弃小数位,整数位+1
            console.log(Math.ceil(0.99));
            //2.向下取整:舍弃小数位,保留整数位
            console.log(Math.floor(0.99));
            //3.四舍五入取整
            console.log(Math.round(0.49));
            console.log(Math.round(0.5));
            //4.生成0~1之间的随机小数
            console.log(Math.random());
        </script>
    </body>
    </html>
    View Code

    一、BOM 

    1. BOM 介绍

    BOM全称为“Browser Object Model”,浏览器对象模型。提供一系列操作浏览器的属性和方法。核心对象为window对象,不需要手动创建,跟随网页运行自动产生,直接使用,在使用时可以省略书写。 

    2. window对象常用方法 

    1)网页弹框 

    alert() //警告框

    prompt() //带输入框的弹框,可以接收两个参数,(提示信息,输入框内的默认值)

    prompt"请输入"0

    confirm() //确认框 

    2)窗口的打开和关闭 

    window.open("URL") //新建窗口访问指定的URL

    window.open("http:www.baidu.com")开窗口新弹出一个窗口

    window.close() //关闭当前窗口 

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            console.log(window);
            //window对象的方法
            //1.网页弹框
            /*
            window.alert("操作无效");//无返回值
            var r = window.confirm("是否确认");//返回布尔值
            console.log(r);
            //prompt可以接收两个参数("提示信息",输入框的默认值)
            var r1 = window.prompt("请输入",0);
            */
            /*
            全局变量和全局函数都是window对象的属性和方法
            */
            var a = 100;
            function a1(){
                console.log("a1被调用");
            }
            console.log(window);
            console.log(a,window.a);
            a1();
            window.a1();
            //2.窗口的打开和关闭
            /*给出确认框,当点击确定时打开目标文件,点击取消时关闭当前窗口*/
            /*
            var r = confirm("");
            if(r){
               window.open("http://www.baidu.com");
            }else{
                window.close();
            }
            */
    
        </script>
    </head>
    <body>
        <a href="04_history.html">页面0</a>
        <a href="00_work.html">页面一</a>
        <button onclick="console.log(history.length)">
            获取length
        </button>
    <button onclick="history.back()">返回</button>
        <button onclick="history.forward()">前进</button>
    </body>
    </html>
    View Code

    3)定时器方法

    间歇调用(周期性定时器) 
    作用:每隔一段时间就执行一次代码 
    开启定时器: 

    var timerID = setInterval(function,interval);

    /*

    参数 :

    function : 需要执行的代码,可以传入函数名;或匿名函数

    interval : 时间间隔,默认以毫秒为单位 1s = 1000ms

    返回值 : 返回定时器的ID,用于关闭定时器

    */

    关闭定时器 : 

    //关闭指定id对应的定时器

    clearInterval(timerID);

    超时调用(一次性定时器) 
    作用:等待多久之后执行一次代码 

    //开启超时调用:

    var timerId = setTimeout(function,timeout);

    //关闭超时调用:

    clearTimeout(timerId); 

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <button id="start">开启</button>
        <button id="stop1">关闭</button>
        <h1 style="text-align:center;" id="show"></h1>
        <script>
            var timer;
            start.onclick = function (){
                //开启定时器
                timer = setInterval(function (){
                    //打印日期时间(Date)
                    var date = new Date();
                    console.log(date);
                },1000);
                console.log("---------");
            };
            stop1.onclick = function (){
                //关闭间歇调用
                clearInterval(timer);
            };
            /*页面输出5秒倒计时*/
            var i = 5;
            show.innerHTML = i;
            var timerId = setInterval(function (){
                i--;
                if(i != 0 ){
                    show.innerHTML = i;
                }else{
                    show.innerHTML = "倒计时结束!";
                    //停止定时器
                    clearInterval(timerId);
                }
            },1000);
    
        </script>
    </body>
    </html>
    View Code
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <button id="start">开启</button>
        <button id="stop1">关闭</button>
        <script>
            start.onclick = function (){
                //开始超时调用
                timer = setTimeout(function (){
                    console.log("超时调用");
                },1000);
            };
            stop1.onclick = function (){
                //关闭超时调用
                clearTimeout(timer);
            };
    
        </script>
    </body>
    </html>
    View Code
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>  </style>
      <script>
      </script>
    </head>
    <body>
    <h1 id="d1">欢迎学习人工智能</h1>
    <script>
        function f1(){
            var tag=document.getElementById("d1");
            var content=tag.innerText;
            var l=content.charAt(0);
            var f=content.substring(1,content.length);
            var new_content=f+l;
            tag.innerText=new_content;
        }
        setInterval("f1();",1000);
    </script>
    </body>
    </html>
    View Code

    window 对象常用属性

    window的大部分属性又是对象类型 

    1)history

    作用:保存当前窗口所访问过的URL 
    属性 : 
    length 表示当前窗口访问过的URL数量 
    方法 : 

    back() 对应浏览器窗口的后退按钮,访问前一个记录

    forward() 对应前进按钮,访问记录中的下一个URL

    go(n) 参数为number值,翻阅几条历史记录,正值表示前进,负值表示后退 

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            console.log(history);
        </script>
    </head>
    <body>
        <a href="00_work.html">页面一</a>
        <a href="01_window.html">页面二</a>
        <button onclick="console.log(history.length)">
            获取length
        </button>
        <button onclick="history.back()">返回</button>
        <button onclick="history.forward()">前进</button>
        <button onclick="history.go(1)">go(1)</button>
        <button onclick="history.go(-1)">go(-1)</button>
        <button onclick="history.go(1)">go(2)</button>
        <button onclick="history.go(-1)">go(-2)</button>
    
       <!--历史记录的长度变化:
        1.通过超链接在当前窗口访问其他URL,会造成历史记录增加
        2.前进和后退不会造成历史记录的变化,只是指针的移动
        3.历史记录的进出栈管理:
            A->B->C
            从页面C后退至页面A,在A中通过超链接跳转至页面C
            A->C
        -->
    </body>
    </html>
    View Code

    2)location

    作用:保存当前窗口的地址栏信息(URL) 
    属性 : 
    href 设置或读取当前窗口的地址栏信息 
    方法 : 
    reload(param) 重载页面(刷新) 
    参数为布尔值,默认为false,表示从缓存中加载,设置为true,强制从服务器根目录加载 

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <!--设置或读取窗口的地址栏信息(URL)-->
        <button onclick="console.log(location.href);">
            获取href
        </button>
        <button onclick="location.href='http://www.baidu.com';">
            设置href</button>
        <!--reload(false)默认从缓存中重载页面,设置为true,表示
        从服务器根目录重载页面-->
        <button onclick="location.reload(true)">刷新</button>
    </body>
    </html>
    View Code

    3)document

    提供操作文档HTML 文档的方法,,参见DOM 

    二、DOM节点操作

    DOM全称为“Document Object Model”,文档对象模型,提供操作HTML文档的方法。(注:每个html文件在浏览器中都视为一篇文档,操作文档实际就是操作页面元素。) 

    1)节点对象

    JS 会对html文档中的元素,属性,文本内容甚至注释进行封装,称为节点对象,提供相关的属性和方法。 

    2)常用节点分类

    元素节点 ( 操作标签)

    属性节点(操作标签属性)

    文本节点(操作标签的文本内容) 

    3)获取元素节点

    根据标签名获取元素节点列表 

    var elems = document.getElementsByTagName("");

    代码如下:

    var list1=document.getElementsByTagName("h1");

    console.log(list1)

    /*

    参数 : 标签名

    返回值 : 节点列表,需要从节点列表中获取具体的元素节点对象

    */

    根据class属性值获取元素节点列表 

    var elems = document.getElementsByClassName("");

    /*

    参数 : 类名(class属性值)

    返回值 : 节点列表

    */

    根据id属性值取元素节点 

    var elem = document.getElementById("");

    /*

    参数 : id属性值

    返回值 : 元素节点

    */

    根据name属性值取元素列表 

    var elems = document.getElementsByName("");

    /*

    参数 : name属性值

    返回 : 节点列表

    */ 

    4)操作元素内容

    元素节点对象提供了以下属性来操作元素内容 

    innerHTML : 读取或设置元素文本内容,可识别标签语法

    innerText : 设置元素文本内容,不能识别标签语法

    value : 读取或设置表单控件的值 

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    
    </head>
    <body>
        <h1 class="c1" id="d1" style="">Fine,Thank U,and you</h1>
        <h1 class="c1">岁月静好,感恩有你,与你相随</h1>
        <input type="text" name="username" value="">
        <button id="btn">取值</button>
        <div id="show"></div>
    
        <script>
            //获取元素的操作只能等待标签解析完毕后执行
            //1.根据标签名获取元素列表
            var list1 = document.getElementsByTagName("h1");
            console.log(list1);
            console.log(list1[0],list1[0].innerHTML);
            //2.根据class属性值获取元素列表
            var list2 = document.getElementsByClassName("c1");
            console.log(list2);
            //3.根据id属性值获取元素
            var elem = document.getElementById("d1");
            console.log(elem);
            //标签属性都是元素节点对象的属性
            console.log(elem.id,elem.className);
            elem.style = "color:red;text-align:center;";
            //4.根据name属性值获取元素列表
            var list3 = document.getElementsByName("username");
            console.log(list3);
    
            //操作元素内容或值
            elem.innerHTML = "<a href>小泽最帅</a>";
            console.log(elem.innerHTML);
            elem.innerText = "<a href>小泽最帅</a>";
            console.log(elem.innerText);
            btn.onclick = function (){
                //获取表单控件的值
                console.log(list3[0].value);
                show.innerHTML = "<h1>"+list3[0].value+"</h1>";
            };
            /*
            创建输入框,按钮和div
            点击按钮时将输入框中的内容以一级标题的形式显示在div中
            */
        </script>
    </body>
    </html>
    View Code

    5)操作元素属性

    通过元素节点对象的方法操作标签属性 

    elem.getAttribute("attrname");//根据指定的属性名返回对应属性值

    elem.setAttribute("attrname","value");//为元素添加属性,参数为属性名和属性值

    elem.removeAttribute("attrname");//移除指定属性

    标签属性都是元素节点对象的属性,可以使用点语法访问,例如: 

    h1.id = "d1"; //set 方法

    console.log(h1.id); //get 方法

    h1.id = null; //remove 方法

    注意 : 
    + 属性值以字符串表示 
    + class属性需要更名为className,避免与关键字冲突,例如: 
    h1.className = "c1 c2 c3"; 

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script src="index.js"></script>
        <style>
            #main{
                color:red;
            }
            .c1{
                background:green;
            }
        </style>
    </head>
    <body>
        <h1 id="" style="">小泽真温柔</h1>
        <script>
            //获取元素节点
            var h1 = $("h1");
            //操作标签属性
            h1.setAttribute("id","d1");
            h1.setAttribute("class","c1");
            console.log(h1.getAttribute("class"));
            h1.removeAttribute("id");
            //点语法
            h1.id = "box";
            h1.className = "c1 c2";
            console.log(h1.id,h1.className);
            h1.id = "";
            h1.className = null;
    
            //操作元素样式
            //1.通过操作元素的id/class属性,对应选择器的样式
            h1.id = "main";
            h1.className = "c1";
    
            //2.操作行内样式
            console.log(h1.style);
            //直接赋值
            h1.style = "200px;height:200px;";
            //单独调整样式,h1.style返回样式表对象,由CSS的属性组成
            //出现连接符的属性名一律更名为驼峰标识
            h1.style.width = "300px";
            h1.style.textAlign = "center";
            h1.style.lineHeight = "200px";
        </script>
    
    </body>
    </html>
    View Code

    6)操作元素样式

    为元素添加id,class属性,对应选择器样式

    操作元素的行内样式,访问元素节点的style属性,获取样式对象;样式对象中包含CSS属性,使用点语法操作。 

    p.style.color = "white";

    p.style.width = "300px";

    p.style.fontSize = "20px";

    注意 : 
    + 属性值以字符串形式给出,单位不能省略 
    + 如果css属性名包含连接符,使用JS访问时,一律去掉连接符,改为驼峰. font-size -> fontSize 

    7)元素节点的层次属性

    parentNode 
    获取父节点

    childNodes 
    获取子节点数组,只获取直接子节点(包含文本节点和元素节点)

    children 
    获取子节点数组,只获取直接子元素,不包含间接元素和文本节点

    previousSibling 
    获取前一个兄弟节点(文本节点也可以是兄弟节点) 
    previousElementSibling 获取前一个元素兄弟节点

    nextSibling 
    获取后一个兄弟节点 
    nextElementSibling 获取下一个元素兄弟节点

    attributes 
    获取属性节点的数组 

    8)节点的创建,添加和删除

    创建元素节点 

    var elem = document.createElement("标签名");//返回创建好的元素节点

    节点的添加 
    添加和移除操作都必须由父元素执行,方法如下: 

    在父元素的末尾添加子节点 

    parendNode.appendChild(node);

    指定位置添加 

    parendNode.insertBefore(newNode,oldNode);//在oldNode之前添加子节点

    移除节点 

    parentNode.removeChild(node);//移除指定节点对象 

    三、DOM 事件处理

    事件:指用户的行为或元素的状态。由指定元素监听相关的事件,并且绑定事件处理函数。 
    事件处理函数:元素监听事件,并在事件发生时自动执行的操作。 

    1) 事件函数分类

    鼠标事件 

    onclick //单击

    ondblclick //双击

    onmouseover //鼠标移入

    onmouseout //鼠标移出

    onmousemove //鼠标移动

    键盘事件(了解) 

    onkeydown //键盘按键被按下

    onkeyup //键盘按键被抬起

    onkeypress //字符按键被按下

    文档或元素加载完毕 

    onload //元素或文档加载完毕

    表单控件状态监听 

    onfocus //文本框获取焦点

    onblur //文本框失去焦点

    oninput //实时监听输入

    onchange //两次输入内容发生变化时触发,或元素状态改变时触发

    onsubmit //form元素监听,点击提交按钮后触发,通过返回值控制数据是否可以发送给服务器 

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            div{
                width:200px;
                height:200px;
                background:green;
            }
        </style>
    </head>
    <body>
        <div id="div"></div>
        <script>
            /*
            事件对象:保存与当前事件相关的所有信息,
            伴随事件发生自动创建,自动作为参数传递到事件处理函数中,
            我们只需要在事件处理函数中定义形参接收即可
            */
    
            //1.鼠标事件
            div.onclick = function (e){//event  evt e
                /*
                鼠标事件对象,主要保存鼠标的位置信息
                offsetX offsetY:获取鼠标在元素坐标系中的位置
                */
                console.log("单击",e,e.offsetX,e.offsetY);
            };
            div.ondblclick = function (){
               // console.log("双击");
            };
            div.onmouseover = function (){
                //console.log("鼠标移入");
            };
            div.onmouseout = function (){
                //console.log("鼠标移出");
            };
            div.onmousemove = function (){
               // console.log("鼠标移动");
            };
            //2.键盘事件(了解)
            onkeydown = function (e){
                /*
                键盘事件对象
                key属性返回按键对应的字符
                onkeydown:获取事件对象的which,功能键返回键盘编码;
                字符键一律返回大写字母的ASC码
                onkeypress:获取事件对象的which,返回字符键的ASC码值,
                区分大小写
                */
                console.log("onkeydown",e,e.key,e.which);
            };
            onkeypress = function (e){
                console.log("onkeypress",e,e.key,e.which);
            };
            onkeyup = function (){
                //console.log("onkeyup");
            };
    
        </script>
    </body>
    </html>
    View Code

    2)事件绑定方式

    内联方式 
    将事件名称作为标签属性绑定到元素上 
    例 : 

    <button onclick="alert()">点击</button>

    动态绑定 
    获取元素节点,动态添加事件 
    例 : 

    btn.onclick = function (){

    }; 

    3)事件函数使用

    1. onload
    常用于等待文档加载完毕再进行下一步操作
    2. 鼠标事件
    3. 表单事件
    onchange: 监听输入框前后内容是否发生变化;也可以监听按钮的选中状态
    onsubmit :表单元素负责监听,允许返回布尔值,表示数据是否可以发送;返回true,允许发送;返回false,不允许提交
    4. 键盘事件

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            window.onload = function (){
                //窗口加载完毕后执行
                //console.log("window.onload");
                //输入框相关
                uname.onfocus = function (){
                    //console.log("获取到焦点");
                };
                uname.onblur = function (){
                    //this:指代事件的触发对象或函数的调用者
                    //console.log("失去焦点:",this,uname.value,this.value);
                };
                //实时监听输入
                uname.oninput = function (){
                    //console.log("oninput:",this.value);
                };
                //监听前后两次输入的内容是否一致
                uname.onchange = function (){
                    //只有前后两次输入不一致,并且失去焦点时才触发
                    console.log("onchange:",this.value);
                };
                //监听按钮状态的改变
                savePwd.onchange = function (){
                    /*按钮有选中和未选中两种状态,
                    对应checked属性值为true/false*/
                    console.log(this.checked);
                };
                //监听表单中的数据是否可以提交
                /*
                交由form元素监听,在点击提交按钮时触发,允许返回布尔值,
                true表示允许发送,false表示阻止发送
                */
                form.onsubmit = function (){
                    //用户名为空时阻止提交
                    if(uname.value == ""){
                        return false;
                    }else{
                        return true;
                    }
                };
    
            };
            function fn(){
                console.log(this);
            }
            window.fn();
        </script>
    </head>
    <body>
        <form action="/login" method="get" enctype="" id="form">
            用户姓名:<input type="text" name="uname" id="uname"><br>
            记住密码:<input type="checkbox" id="savePwd" checked="checked"><br>
            <input type="submit">
        </form>
    
        <ul>
            <li>
                <span id="city">北京</span>
                <ol id="ol">
                    <li>北京</li>
                    <li>上海</li>
                    <li>广州</li>
                    <li>深圳</li>
                </ol>
            </li>
        </ul>
        <script>
            //console.log("测试");
            /*
            实现下拉菜单的点击传值(this练习)
            */
            //获取内层li元素列表
            var list = ol.children;
            for(var i = 0; i < list.length; i++){
                console.log("for:",i);
                list[i].onclick = function (){
                    console.log(i);
                    //传值
                    //this指代事件触发对象
                    city.innerHTML = this.innerHTML;
                    console.log(this);
                };
            }
    
        </script>
    </body>
    </html>
    View Code

    键盘事件

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script src="index.js"></script>
    </head>
    <body>
        <div>
            <p>参考</p>
            示例
            <h1 id="d1" class="c1">
                <span>h1->span</span>
            </h1>
            <p>参考</p>
        </div>
        <script>
            var h1 = $("h1");
            var div = $("div");
            //获取唯一的父节点
            console.log(h1.parentNode);
            //获取子节点数组(包含文本节点和元素节点)
            console.log(div.childNodes);
            //获取子元素数组(只包含直接子元素)
            console.log(div.children);
            //获取兄弟节点
            console.log(h1.previousSibling);
            console.log(h1.nextSibling);
            //获取元素兄弟节点
            console.log(h1.previousElementSibling);
            console.log(h1.nextElementSibling);
            //获取属性节点数组
            console.log(h1.attributes);
    
            //节点的创建,添加和移除
            //创建元素节点
            var h2 = document.createElement("h2");
            console.log(h2);
            h2.innerHTML = "动态添加";
            h2.id = "d2";
            //添加节点,由父节点操作
            document.body.appendChild(h2);//追加至父元素末尾
            /*节点与页面中元素一一对应,想在页面中出现几个元素,
            就需要创建几个节点*/
            var h3 = document.createElement("h3");
            //指定位置添加
            document.body.insertBefore(h3,h2);
    
            //移除节点
            //document.body.removeChild(div);
    
            /*
            1.实现网页轮播图
                方式一:控制图片的隐藏与显示
                方式二:切换图片路径
            2.参照效果图(添加元素练习)    */
    
        </script>
    </body>
    </html>
    View Code
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            #banner{
                width:600px;
                height:300px;
                margin:0 auto;
            }
            #banner img{
                width:600px;
                height:300px;
            }
        </style>
    </head>
    <body>
        <div id="banner">
            <img src="northStar.jpg" alt="" id="img">
        </div>
        <script>
            //1.保存图片路径
            var imgArr = ["northStar.jpg","wxy.jpeg"];
            //2.保存图片索引
            var index = 0;
            //3.开启间歇调用
            var timer = setInterval(autoPlay,1000);
            function autoPlay(){
                //更新索引
                index ++;
                //判断是否越界
                if(index == imgArr.length){
                    index = 0;
                }
                //修改元素的src属性
                img.src = imgArr[index];
            }
        </script>
    </body>
    </html>
    View Code
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            table{
                width:600px;
                border:1px solid #000;
            }
            th,td{
                border:1px solid #000;
            }
    
        </style>
    
    </head>
    <body>
        <div>
            <input type="text" name="gname" placeholder="商品名称">
            <input type="text" name="gprice" placeholder="商品价格">
            <input type="text" name="gcount" placeholder="商品数量">
            <button onclick="add()">增加</button>
        </div>
        <table>
            <thead>
                <tr>
                    <th>商品名称</th>
                    <th>商品价格</th>
                    <th>商品数量</th>
                    <th>
                        <button>操作</button>
                    </th>
                </tr>
            </thead>
            <tbody id="tbody">
    
            </tbody>
        </table>
        <script>
            function add(){
                //1.获取输入框
                var list = document.getElementsByTagName("input");
                //2.获取输入框的值
                var gname = list[0].value;
                var gprice = list[1].value;
                var gcount = list[2].value;
                //3.创建元素节点
                var tr = document.createElement("tr");
                var td1 = document.createElement("td");
                td1.innerHTML = gname;
    
                var td2 = document.createElement("td");
                td2.innerHTML = gprice;
    
                var td3 = document.createElement("td");
                td3.innerHTML = gcount;
    
                var td4 = document.createElement("td");
                td4.innerHTML = "<button>修改</button><button>删除</button>";
    
                //4.添加显示
                tr.appendChild(td1);
                tr.appendChild(td2);
                tr.appendChild(td3);
                tr.appendChild(td4);
                tbody.appendChild(tr);
    
                /*
                var list
                var tr
                for(var i = 0; i < 3;i++){
                    var td = document.....;
                    td.innerHTML = list[i].value;
                    tr.appendChild(td);
                }
                var td4 = ;
                tr.appendChild(td4);
                tbody.appendChild(tr)
                */
            }
        </script>
    </body>
    </html>
    View Code

     

  • 相关阅读:
    10.22(day11) Object类 异常
    10.19(day10)
    10.18(day9)内部类 抽象类 接口
    10.17(day8) Static关键字 包的使用 访问修饰符的权限 设计模式
    paho-mqtt error1: incorrect protocol version解决方法
    Python进阶-pickle/eval/exec
    关联分析算法Apriori和FP-Growth
    LOF聚类分析
    Python进阶-迭代器和生成器
    Linux常见坑
  • 原文地址:https://www.cnblogs.com/gyl10/p/11126182.html
Copyright © 2011-2022 走看看