1 案例1-表单校验

1.1 需求介绍

当用户离开输入框的时候,对用户在输入框中输入的内容进行校验,如果信息合法,则不进行任何提示,如果信息不合法,则在输入框后面以红色的字体提示即可;

1.2 技术分析

1: 当用户离开输入框的时候,我们希望获取输入框的值并进行校验;需要使用事件完成;
2: 如果检验不合法,希望在输入框后面用红色的字体提示,需要使用js的innerHTML属性完成;

1.3 Js中的事件

1.3.1 什么是事件?

当用户在浏览器页面上,触发一些条件的时候,我们可以使用代码对触发的行为作出相应的处理方案,这个过程,就是事件处理机制。

1.3.2 在html中有哪些预定义的事件?(重点)

在html中的常用的事件分为3类:
1:页面加载事件
onload
2:鼠标相关的事件
点击事件: onclick
鼠标移入: onmouseover
鼠标移出: onmouseout
3: 表单相关事件
当表单提交的时候 onsubmit
失去焦点事件 onblur
获取焦点 onfocus
下拉框变化 onchange

1.3.3 事件的绑定方式(重点)

一共有两种:
1:使用html标签的事件属性:
格式:

2:使用js代码,给标签对象派发事件:
格式:
标签对象.事件名 = function(){
}
注意:
事件的绑定和事件的触发是两个时机,事件的绑定与事件的触发一定要区分开!!!!
只有onload特殊,前面不用有标签对象可以直接用,其他的都不行。
在使用js的方式时,页面加载事件只能使用一次。

1.4 Js的方式操作标签的元素体(重要)-innerHTML

innerHTML 属性对于获取或替换 HTML 元素的内容很有用。
innerHTML属性可以使用任意一个html的标签对象直接调用;
格式:
取元素体:var 结果值=标签对象.innerHTML;
修改元素体:标签对象.innerHTML=”新的元素体”;
扩展:(不常用,了解)
与innerHTML有一个相似的属性,是innerText,区别在于:
innerText只能操作纯文本文字,如果包含标签,会不识别标签,直接原样输出;

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <script>
  7. /*
  8. * 当页面加载完成之后,获取d1的元素体并打印出来
  9. */
  10. onload=function(){
  11. var v=document.getElementById("d1").innerHTML;
  12. alert(v)
  13. //将d1的元素体,修改为红色的你好
  14. document.getElementById("d1").innerHTML='<font color="red">你好</font>';
  15. }
  16. </script>
  17. </head>
  18. <body>
  19. <div id="d1">
  20. 这是d1的内容
  21. </div>
  22. </body>
  23. </html>

1.5 表单校验的步骤

1:在form表单的基础上;
2:写一个页面加载事件,给所有的输入框绑定失去焦点的事件;
3:编写一个当失去焦点事件触发的时候,需要执行的事情;(获取输入框的值,并校验,根据校验的结果,决定在输入框的后面是否以文字提示);

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <script>
        function check(id,info){
            //1:根据id的值获取标签对象
            var inp=document.getElementById(id);
            //2:根据标签对象,获取标签的value属性值
            var v=inp.value;
            //alert(v)
            if(v==""){
                //说明信息不合法,需要在对应的span中提示
                var sp=document.getElementById(id+"_msg");
                //操作sp的元素体
                sp.innerHTML='<font color="red">'+info+'</font>';
            }else{
                var sp=document.getElementById(id+"_msg");
                //操作sp的元素体
                sp.innerHTML='';
            }
        }
    </script>
    <body>

        <form action="#" method="get">
            <table width="60%" height="60%"  align="center" bgcolor="#ffffff">
                <tr>
                    <td colspan="3">会员注册USER REGISTER</td>
                </tr>
                <tr>
                    <td width="20%">用户名:</td>
                    <td width="40%"><input type="text" name="username" id="username" onblur="check('username','用户名不能为空')"></td>
                    <td width="40%"><span id="username_msg"></span></td>
                </tr>
                <tr>
                    <td>密码:</td>
                    <td><input type="password" name="password" id="password" onblur="check('password','密码不能为空')"></td>
                    <td><span id="password_msg"></span></td>
                </tr>
                <tr>
                    <td>确认密码:</td>
                    <td><input type="password" name="repassword" id="repassword" onblur="check('repassword','确认密码不能为空')"></td>
                    <td><span id="repassword_msg"></span></td>
                </tr>
                <tr>
                    <td>Email:</td>
                    <td><input type="text" name="email" id="email" onblur="check('email','邮箱不能为空')"></td>
                    <td><span id="email_msg"></span></td>
                </tr>
                <tr>
                    <td>姓名:</td>
                    <td><input type="text" name="name" id="name" onblur="check('name','真实姓名不能为空')"></td>
                    <td><span id="name_msg"></span></td>
                </tr>
                <tr>
                    <td>性别:</td>
                    <td>
                        <input type="radio" name="sex" id="sex1" value="男"> 男
                        <input type="radio" name="sex" id="sex2" value="女" />女
                        <input type="radio" name="sex" id="sex3" value=""  checked="checked"/>保密
                    </td>
                </tr>
                <tr>
                    <td>出生日期</td>
                    <td>
                        <input type="text" name="birthday">

                    </td>
                </tr>
                <tr>
                    <td>验证码</td>
                    <td>
                        <input type="text" name="checkcode">
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <input type="submit" value="注册" />
                    </td>
                </tr>
            </table>
        </form>
    </body>
</html>

2 案例2-隔行换色

2.1 需求分析

当页面加载后,对表格的奇数行和偶数行分别设置不同的背景色;当鼠标移入某一行的时候,背景色变为honse,当鼠标移出的时候,背景色变为原来的颜色;

2.2 技术分析

1:使用document对象的其他方法,一次性获取页面中的所有表格行对象;
2:使用js的数组保存多个行对象并操作数组中的每一个行对象即可;
3:根据索引可以判断当前行是奇数和偶数行问题,并设置背景色;
4:需要给每一行绑定鼠标移入和移出事件;事件中需要获取原来的颜色,并修改为红色,鼠标离开的时候,还原成原来的颜色;

2.3 关于获取更多html标签信息的方法

关于获取更多信息的方法:
getElementsByTagName() 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。
getElementsByClassName() 返回包含带有指定类名的所有元素的节点列表。

2.4 Js的数组

js的数组中,也有索引,也有length属性,用于代表长度。
数组定义格式:
常用的格式:(推荐的格式)
var 数组名 = [元素值1,元素值2…..];
了解的格式:
var 数组名 =new Array();
var 数组名 =new Array(长度);
var 数组名 =new Array(元素值1,元素值2…..);
js数组与java中不一样的地方:
1:在js中,数组可以存任意数据类型。(同一个数组里可存不同类型数据)
2:在js中,数组永远不会出现索引越界异常,长度会自动改变到您使用的那个索引。
3:数组长度可变。
在js中的数组自带了一些方法,可以直接使用:(了解,不常用)
1:join方法 可以直接将数组转成字符串形式
2:concat方法 可以连接多个数字;
3sort方法 对数组排序;

2.5 js的this关键字

js中的this代表的是当前标签对象。(this写在了哪个标签中,代表的就是哪个标签对象)
通常用在事件中;
例如:

    <script>
            /*
             * this  练习
             */
            function show(t){
                alert(t.innerHTML)
            }
        </script>
    </head>
    <body>
        <div onclick="show(this)">
            这是div的内容
        </div>
        <span onclick="show(this)">
            这是span的内容
        </span>
    </body>

2.6 案例的步骤

1:当页面加载的时候,使用document对象的getElementsByTagName方法获取表格的所有行对象;(忽略第一行)
2:迭代数组对象,并根据索引判断奇数行和偶数行并设置背景色;
3:对每一行都绑定鼠标移入和移出事件;
在鼠标移入事件中:
需要获取原来的颜色保存起来,并修改当前行为红色,
在鼠标移出事件中:
修改当前行为原来的颜色;

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script>
            onload=function(){
                var arr=document.getElementsByTagName("tr");
                for(var i=1;i<arr.length;i++){
                    //获取当前行对象
                    var tr=arr[i];
                    //据索引判断奇数行和偶数行并设置背景色;
                    if(i%2==0){
                        tr.style.backgroundColor="blueviolet";
                    }else{
                        tr.style.backgroundColor="yellow";
                    }
                    //对每一行都绑定鼠标移入和移出事件;
                    tr.onmouseover=function(){
                        //需要获取原来的颜色保存起来,并修改当前行为红色,
                        y = this.style.backgroundColor;
                        this.style.backgroundColor="red";
                    }
                    tr.onmouseout=function(){
                        this.style.backgroundColor=y;
                    }
                }
            }
        </script>
    </head>
    <body >
        <table border="1px" width="100%">
            <tr>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
            </tr>
            <tr>
                <td>1</td>
                <td>1</td>
                <td>1</td>
            </tr>
            <tr>
                <td>2</td>
                <td>2</td>
                <td>2</td>
            </tr>
            <tr>
                <td>3</td>
                <td>3</td>
                <td>3</td>
            </tr>
            <tr>
                <td>4</td>
                <td>4</td>
                <td>4</td>
            </tr>
            <tr>
                <td>5</td>
                <td>5</td>
                <td>5</td>
            </tr>
        </table>
    </body>
</html>

3 案例3-全选与反选

3.1 需求介绍

当用户点击页面上的按钮的时候,分别选择相应的效果;

3.2 技术分析

1:当页面加载的时候,给3个按钮绑定点击事件;
2:3个事件分别做:
(1)全选 获取所有的多选框,将每一个多选框的checked属性修改为true即可
(2)全不选 获取所有的多选框,将每一个多选框的checked属性修改为false即可
(3)反选 获取所有的多选框,将每一个多选框的checked属性取反并设置回去;

3.3 案例代码实现

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <script type="text/javascript">
        onload=function(){
            //给全选按钮绑定事件
            document.getElementById("quan").onclick=function(){
                //获取所有的多选框,将每一个多选框的checked属性修改为true即可
                var arr=document.getElementsByClassName("itemSelect");
                //迭代数组
                for(var i=0;i<arr.length;i++){
                    arr[i].checked=true;
                }
            }
            //给全不选按钮绑定事件
            document.getElementById("bu").onclick=function(){
                //获取所有的多选框,将每一个多选框的checked属性修改为false即可
                var arr=document.getElementsByClassName("itemSelect");
                //迭代数组
                for(var i=0;i<arr.length;i++){
                    arr[i].checked=false;
                }
            }
            //给反选按钮绑定事件
            document.getElementById("fan").onclick=function(){
                //获取所有的多选框,将每一个多选框的checked属性修改为取反后的值即可
                var arr=document.getElementsByClassName("itemSelect");
                //迭代数组
                for(var i=0;i<arr.length;i++){
                    arr[i].checked=!arr[i].checked;
                }
            }
        }
    </script>
    <body>
        <table border="1" cellpadding="0" cellspacing="0" width="80%">
            <tr>
                <th>
                    <input type="button" id="quan" value="全选" />
                    <input type="button" id ="bu" value="全不选" />
                    <input type="button" id="fan" value="反选" />
                </th>
                <th>序号</th>
                <th>商品名称</th>
                <th>商品描述</th>
                <th>操作</th>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" class="itemSelect" />        
                </td>
                <td>1</td>
                <td>手机数码</td>
                <td>手机数码商品信息</td>
                <td>
                    <a href="#">修改</a>
                    <a href="#">删除</a>
                </td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" class="itemSelect" />        
                </td>
                <td>2</td>
                <td>电脑办公</td>
                <td>电脑办公商品信息</td>
                <td>
                    <a href="#">修改</a>
                    <a href="#">删除</a>
                </td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" class="itemSelect" />        
                </td>
                <td>3</td>
                <td>鞋靴箱包</td>
                <td>鞋靴箱包商品信息</td>
                <td>
                    <a href="#">修改</a>
                    <a href="#">删除</a>
                </td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" class="itemSelect" />        
                </td>
                <td>4</td>
                <td>家居饰品</td>
                <td>家居饰品商品信息</td>
                <td>
                    <a href="#">修改</a>
                    <a href="#">删除</a>
                </td>
            </tr>
        </table>
    </body>
</html>

4 案例4-省市联动

4.1 需求

当用户选择相应的省份信息时,动态的修改对应的市区信息;

4.2 技术分析

1:当页面加载的时候,给第一个下拉框绑定一个onchange事件;
2:当onchange触发的时候,需要获取用户选择的省份编号,并根据编号获取对应的市区信息;
3:需要使用二维数组保存省份和市区的信息;
4:需要从省份中获取对应的市区信息,并将这些市区信息添加到第二个下拉框中;(操作元素体)

4.3 案例代码实现

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script>
        // 定义二维数组,存储城市信息
        var cities = new Array(4);
        cities[0] = new Array("市辖区");
        cities[1] = new Array("长春市","吉林市","松原市","延边市");
        cities[2] = new Array("济南市","青岛市","烟台市","潍坊市","淄博市");
        cities[3] = new Array("石家庄市","唐山市","邯郸市","廊坊市");
        cities[4] = new Array("南京市","苏州市","扬州市","无锡市");

        onload=function(){
            //给第一个下拉框绑定一个onchange事件;
            document.getElementById("sheng").onchange=function(){
                //立刻清除市区信息
                document.getElementById("shi").innerHTML="<option>--请选择市---</option>";


                //获取用户选择的省份编号值;
                var v=document.getElementById("sheng").value;
                //alert(v)
                //根据编号获取对应的市区信息
                var arr= cities[v];
                //此时的arr中都是市区的名称
                var op="<option>--请选择市---</option>";
                for(var i=0;i<arr.length;i++){
                    //累加拼接下面的option标签
                    op+='<option>'+arr[i]+'</option>';
                }
                //将元素体存进行
                document.getElementById("shi").innerHTML=op;
            }
        }
        </script>
    </head>
    <body>
        <select id="sheng">
            <option>--请选择省份---</option>
            <option value="0">北京</option>
            <option value="1">吉林省</option>
            <option value="2">山东省</option>
            <option value="3">河北省</option>
            <option value="4">江苏省</option>
        </select>
        <select id="shi">
            <option>--请选择市---</option>
        </select>
    </body>
</html>

5 Dom对象

5.1 Dom概述

Dom对象就是文档对象模型,代表的是整个文档对象,在dom中有一个节点概念。
Html中任意一个元素或文本或属性都可以看成是一个节点对象;
QQ拼音截图未命名.png

5.2 Dom的作用

使用dom对象。可以操作html文本中的任意内容。
Document 代表整个 HTML 文档,可被用来访问页面中的所有元素。
具体还有什么对象可以去查w3cschool。

5.3 DOM中的节点概述

image.png

5.4 DOM中的通用方法(了解)

createElement() 创建元素节点。
createTextNode() 创建文本节点。
appendChild() 把新的子节点添加到指定节点。
setAttribute() 把指定属性设置或修改为指定的值。

需求:
使用dom的通用方法在一个div中,添加一个红色的字体;

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script>
            onload=function(){
                /*
                 * 给div添加红色的你好
                 * 
                 */
                //创建一个font标签对象
                var f=document.createElement("font");
                //设置属性
                f.setAttribute("color","red");
                //创建文本对象
                var t=document.createTextNode("你好");
                //给f对象,添加文本
                f.appendChild(t);
                //给div添加孩子
                document.getElementById("d1").appendChild(f);
            }
        </script>
    </head>
    <body>
        <div id="d1">

        </div>
    </body>
</html>

5.5 全局函数

所谓的全局函数就是可以直接使用的方法;

分类 函数名 描述
转换 parseFloat() 解析一个字符串并返回一个浮点数。
parseInt() 解析一个字符串并返回一个整数。
执行 eval() 计算 JavaScript 字符串,并把它作为脚本代码来执行。
编码 encodeURI() 把字符串编码为 URI。
decodeURI() 解码某个编码的 URI。