美文网首页
4/09day29_BOM_DOM

4/09day29_BOM_DOM

作者: 蹦蹦跶跶的起床啊 | 来源:发表于2020-04-09 20:47 被阅读0次

    day29_BOM_DOM

    复习

    1. js基础语法
        运算符:
            算数运算符可以与字符串进行数学运算,js底层进行隐式转换
            比较运算符:===(恒等) 特点,比较类型+内容
        流程控制语句
            if判断
                条件表达式:
                    1)布尔
                    2)数值:非0为真
                    3)字符串:非空串为真
                    4)变量:null 或 undefined 都为假
            for循环
                普通for循环
                增强for循环
                索引for循环
    
    2. js函数(方法)
        在js中方法没有重载,重名的会被覆盖
    
    3. js事件(重点)
        js通过事件监听用户的行为,结合函数实现页面交互
        常用事件
            单击 onclick
            获得焦点 onfocus
            失去焦点 onblur
            改变 onchange
            页面加载 window.onload
        事件绑定
            普通函数
            匿名函数
            
    4. js常用内置对象
        string
        array:有点像java的list集合
        date
        math
        全局函数
    

    今日内容

    1. BOM

    2. DOM(与xml的dom4j思想完全一样)可以实现对节点的增删改查

    3. 正则表达式:对字符的过滤校验

    4. 综合案例

    BOM对象

    BOM简介

    BOM(browser Object Model)浏览器对象模型
    JS把浏览器抽象成为一个window对象,运行我们使用js来模拟浏览器的行为.

    Window对象

    三种弹框方式

    • 警告框: 提示信息

      alert();

    • 输入框: 确认信息

      confirm("您确定要删除么?"); 点击确定返回值为 true, 点击取消 返回值为false

    • 输入框: 输入信息

      prompt(); 可以在弹出框里输入信息, 点击确定 返回值为输入的信息, 否则为null值

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>JS三个弹框</title>
    </head>
    <body>
    <!--
    JS三个弹框
        查询手册完成
        1. 警告用户网站内容可能不安全
        2. 让用户确认是否删除所有数据
        3. 提示用户输入银行卡密码
    -->
    
    <script >
    
        // 1. 警告用户网站内容可能不安全
        alert("您浏览器的内容可能不安全!");
        // 2. 让用户确认是否删除所有数据
        let boo = confirm("您确定要删除所有数据吗?");
        console.log(boo);//确定 true 取消 false
        // 3. 提示用户输入银行卡密码
        let str = prompt("请输入密码",123);
        console.log(str);//确定 用户输入的内容 取消 null
    </script>
    </body>
    </html>
    

    两种定时器方式

    • 一次性定时器

      setTimeout(函数, 毫秒数)

    • 循环性定时器

      setInterval(函数, 毫秒数)

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>JS两个定时器</title>
    </head>
    <body>
    
    <!--
    JS两个定时器
        1. 定时5秒之后在控制台打印当前时间
            setTimeout(函数,毫秒数) 创建一个定时器对象,定时`毫秒数`之后,调用一次`函数`
    
        2. 点击按钮取消打印时间
            clearTimeout(定时器) 销毁定时器
    
        3. 每隔2秒在控制台打印递增自然数
            setInterval(函数,毫秒数) 创建一个定时器对象,间隔`毫秒数`调用`函数`,直到永远
    
        4. 点击按钮取消打印自然数
            clearInterval(定时器) 销毁定时器
    总结:
            1. setTimeout执行一次  setInterval执行无数次
            2. setTimeout销毁使用clearTimeout    setInterval销毁使用clearInterval
    
    -->
    
    <button onclick="myclearTimeout()">取消打印时间</button>
    <button onclick="myclearInterval()">取消打印自然数</button>
    
    <script >
        // 1. 定时5秒之后在控制台打印当前时间
        function myf1(){
            console.log("当前时间");
        }
        let timeout = setTimeout(myf1,5000);//创建一个定时器对象,5秒后调用一次myf1
    
        // 2. 点击按钮取消打印时间
        function myclearTimeout(){
            clearTimeout(timeout);//销毁定时器
        }
    
        // 3. 每隔2秒在控制台打印递增自然数
        let k =1;
        function myf2(){
            console.log(k++);
        }
    
        let interval = setInterval(myf2,2000);//创建一个定时器对象,每隔2秒调用一次myf2,直
    到永远
    
        // 4. 点击按钮取消打印自然数
        function myclearInterval(){
            clearInterval(interval);//销毁定时器
        }
    
    </script>
    </body>
    </html>
    

    location地址

    • 获取当前窗口地址

      location.href

    • 刷新当前页面

      location.reload();

    • 跳转到指定地址的页面

      location.href = "地址";

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>location地址</title>
    </head>
    <body>
    <!--
    location地址
        1. 获取当前浏览器地址
            location.href
    
        2. 刷新当前页面
            location.reload();
    
        3. 跳转页面
            location.href = "地址" ;
    
    -->
    
    <button onclick="addr()">获取当前浏览器地址</button>
    <button onclick="refresh()">刷新当前页面</button>
    <button onclick="jump()"> 跳转页面(必用)</button>
    
    <script >
        // 1. 获取当前浏览器地址
        function addr(){
            console.log(location.href);//获取当前浏览器地址
        }
        // 2. 刷新当前页面
        function refresh(){
            location.reload();//刷新当前页面
        }
    
        // 3. 跳转页面(必用)
        function jump(){
            location.href = "https://www.jd.com";//跳转页面(必用)
        }
    
    </script>
    </body>
    </html>
    

    DOM对象

    DOM简介

    DOM(Document Object Model) 页面文档对象模型
    JS把页面抽象成为一个对象,允许我们使用js来操作页面

    DOM获取元素

    • 第一种 : es6之前获取方式

      • 获取一个

        document.getElementById(id属性值)

      • 获取多个

        document.getElementsByTagName(标签名) 根据标签名获取, 返回数组对象

        document.getElementsByClassName(标签名) 根据class属性获取, 返回数组对象

        document.getElementsByName(标签名) 根据name属性获取, 返回数组对象

    • 第二种: es6可根据CSS选择器获取

      • 获取一个

        document.querySelector(id选择器)

      • 获取多个

        document.querySelectorAll(css选择器)

    es6之前的方式可以通过链式编程, 直接绑定 idea中会有提示, 而使用es6之后的方式, idea通过链式编程绑定事件是没有提示的

    DOM操作内容

    • 获取或者修改元素(标签)的纯文本内容

      element.innerText;

    • 获取或者修改元素的html超文本内容

      element.innerHTML;

    • 获取或者修改包含自身的html内容

      element.outerHTML;

    纯文本是指获取到的是只有文字, html超文本指获取到的包含html语法的内容

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>dom操作内容</title>
    </head>
    <body>
    <!--
    dom操作内容
        1. element.innerText; 获取或者修改元素的纯文本内容
        2. element.innerHTML; 获取或者修改元素的html内容
        3. element.outerHTML; 获取或者修改包含自身的html内容
    
    总结:
        1. innerText 获取的是纯文本  innerHTML获取的是所有html内容
        2. innerText 设置到页面中的是纯文本   innerHTML设置到页面中的html会展示出外观效果
        3. innerHTML不包含自身 outerHTML包含自身的html内容
    
    -->
    
    <div id="d1">我是d1<br/></div>
    <div id="d2">我是d2</div>
    <div id="d3">我是d3</div>
    
    <script>
        // 1. 向body中追加html内容
        document.write("<h1>大宝剑</h1>");//向body中追加html内容
        // 2. 获取元素的纯文本,html内容对比
        let d1 = document.querySelector("#d1");//获取d1标签对象
        console.log(d1.innerText);//我是d1
        console.log(d1.innerHTML);//我是d1<br/>
    
        // 3. 修改元素的纯文本,html内容对比
        let d2 = document.querySelector("#d2");//获取d1标签对象
        d2.innerText = "<h2>小宝剑</h2>";//修改d1的纯文本内容
        d2.innerHTML = "<h2>小宝剑</h2>";//修改d1的html内容
    
        // 4. 获取或修改包含元素自身的html内容(了解)
        let d3 = document.querySelector("#d3");//获取d1标签对象
        d3.outerHTML = "<h3>小宝剑</h3>";//修改d1的html内容
    
    </script>
    
    </body>
    </html>
    

    DOM操作属性

    • 获取文本框的值,单选框或复选框的选中状态
      语法: element.properties 获取或者修改元素对象的原生属性
    1. 给元素设置自定义属性
      语法: element.setAttribute(属性名,属性值) 给元素设置一个属性值,可以设置原生和自定义
    • 获取元素的自定义属性值
      语法: element.getAttribute(属性名) 获取元素的一个属性值,可以获取原生和自定义
    • 移除元素的自定义属性
      语法: element.removeAttribute(属性名)

    DOM操作样式

    • 设置css样式

      js对象.style.样式名 = "样式值"

      (样式名是驼峰式命名,如 css格式为 font-size js格式 fontSize)

    • 批量设置css样式(不推荐)

      • 语法

        js对象.style.cssText = "css样式字符串"

      • 特点

        没有提示, 耦合性高

    • 通过class设置样式(解耦性强)

      • 语法

        js对象.className="class选择器的名"

      • 相当于是在css中把样式写好, 然后把这个样式的class名字绑定给需要样式的标签, 即把名字给他

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>dom操作样式</title>
    </head>
    <body>
    <!--
    dom操作样式
        1. 设置一个css样式
            语法: element.style.驼峰格式样式属性名   获取或者修改一个css样式
        2. 批量设置css样式
            语法: element.style.cssText 获取后者修改 标签的style属性的文本值
        3. 通过class设置样式
            语法: element.className 获取或者修改标签的class属性的文本值
        4. 切换class样式
            语法: element.classList es6特别提供的操作元素class的接口
                element.classList常用方法有四个:
                add()  添加一个class样式
                remove() 移除一个class样式
                contains() 判断是否包含某一个样式
                toggle() 切换一个class样式 有则删除,无则添加
    
    -->
    <style>
        #p1{ background-color: red;}
        .mp{color:green}
        .mpp{background-color: lightgray;}
    </style>
    <p id="p1">1. 设置一个css样式</p>
    <p id="p2" >2. 批量设置css样式</p>
    <p id="p3" class="mpp">3. 通过class设置样式</p>
    <p id="p4">4. 切换class样式</p>
    
    <script >
        let p1 = document.querySelector("#p1");//获取段落标签
        let p2 = document.querySelector("#p2");//获取段落标签
        let p3 = document.querySelector("#p3");//获取段落标签
        let p4 = document.querySelector("#p4");//获取段落标签
    
        // 1. 设置一个css样式
        p1.style.color = "white";//白色字体
        p1.style.backgroundColor = "black";//黑色背景
        console.log(p1.style.backgroundColor);//获取一个样式名
        p1.style.display = "none";//隐藏不显示
        p1.style.display = "block";//显示
    
        // 2. 批量设置css样式
        p2.style.cssText = "border:1px solid gold;color:green;font-family:'楷体';";//
    批量修改样式
    
        // 3. 通过class设置样式
        console.log(p3.className);//mpp
        p3.className =p3.className+ " mp";//修改class的文本值
    
        // 4. 切换class样式
        let classList = p4.classList;//p4的class样式集合
        classList.add("mpp");//添加一个class样式
        console.log(classList.contains("mp"));//false
        classList.add("mp");//添加一个class样式
        classList.remove("mp");//移除一个class样式
        classList.toggle("mp");//切换,无则添加
        classList.toggle("mp");//切换,有则删除
    
    </script>
    </body>
    </html>
    

    DOM操作元素

    • 创建一个标签对象

      document.createElement("标签名")

    • 给父标签添加一个子标签

      父标签对象.appendChild("子标签对象名")

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>dom操作元素</title>
    </head>
    <body>
    <!--
    dom操作元素
        1. 后面添加喝酒(掌握)
            innerHTML 获取或者设置标签的html内容
        2. 后面添加烫头(了解)
            document.createElement(标签名称) 创建一个标签对象
            parentNode.appendChild(newNode) 给父标签添加一个子标签
        3.移除元素(了解)
            outerHTML
    -->
    
    <div id="container">
        <input id="smoke" type="checkbox" name="hobby" value="抽烟">
        <label for="smoke">抽烟&emsp;</label>
    
    <!--    <input id="drink" type="checkbox" name="hobby" value="喝酒">-->
    <!--    <label for="drink">喝酒&emsp;</label>-->
    
    <!--    <input id="perm" type="checkbox" name="hobby" value="烫头">-->
    <!--    <label for="perm">烫头&emsp;</label>-->
    
    </div>
    <script >
        let container = document.querySelector("#container");//获取div标签对象
        //1. 后面添加喝酒(掌握) innerHTML
        container.innerHTML += '<input id="drink" type="checkbox" name="hobby" 
    value="喝酒">' +
            '<label for="drink">喝酒&emsp;</label>';//添加喝酒复选框
        //2. 后面添加烫头(了解)
        let input = document.createElement("input");//创建一个input标签
        // console.log(input);//<input/>
        input.id = "perm";//添加一个id属性
        input.type="checkbox";//添加一个type属性
        input.name = "hobby";//添加一个name属性
        input.value = "烫头";//添加一个value属性
        console.log(input);//<input id="perm" type="checkbox" name="hobby" value="烫
    头">
        container.appendChild(input);//向container中追加input元素
    
        let label = document.createElement("label");//创建一个label标签对象
        // console.log(label);//<label></label>
        label.setAttribute("for","perm");//添加一个for属性
        label.innerHTML = "烫头&emsp;";//添加html内容
        console.log(label);//<label for="perm">烫头&emsp;</label>
        container.appendChild(label);//向container中追加label标签对象
    
        //3.移除元素(了解) outerHTML
        // container.outerHTML = "";//删除包含自身的所有html内容
    
    </script>
    </body>
    </html>
    

    正则表达式

    在js中使用正则表达式

    • 创建方式

      1. let regExp = new RegExp("正则表达式");
      2. let regExp ="/正则表达式/";
    • 验证方法

      • 正则对象.test(字符串)

        符合正则规则就返回true, 否则false

      • 字符串对象.match(正则对象)

        返回字符串中符合正则规则的内容

    • 正则修饰符

      i 忽视大小写

      g 全局匹配

      m 多行匹配

    • 在线正则表达式网站

      https://tool.oschina.net/regex/#

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>正则表达式</title>
    </head>
    <body>
    <!--
    正则表达式
        1. 理解正则表达式语法
            语法:
            1. /pattern/attributes (推荐使用)
            2. new RegExp(pattern, attributes); (不推荐)正则表达式中的特殊符号需要转义
            pattern 正则表达式
            attributes 正则表达式修饰符
                        i 不区分大小写 ,匹配字符串时不区分大小写
                        g 全局匹配 ,匹配到一个之后不停止,匹配字符串的所有内容
                        m 多行匹配 ,匹配字符串的所有行的内容
            常用正则表达式对象的方法
                test() 语法 RegExpObject.test(string)
                如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 
    false。
        2. 会使用如下正则表达式匹配字符串
    
    验证邮编
    /\d{6}/
    校验是否全由8位数字组成
    /^[0-9]{8}$/
    中文名称
    /^[\u4E00-\u9FA5]{2,4}$/
    是否带有小数
    /^\d+\.\d+$/
    验证身份证号
    /\d{17}[\d|X]|\d{15}/
    校验电话码格式
    /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/
    验证网址
    /http(s)?:[//]{2}([\w-]+\.)+[\w-]+([/]{1}[\w- ./?%&=]*)?/
    验证EMail
    /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/
    -->
    <script >
        //1. 理解正则表达式语法
        let reg1 = new RegExp("\\d{3}");//需要转义符,不推荐使用.创建一个正则表达式对象,匹配
    有三个数字
        console.log(reg1.test("abc"));//false
        console.log(reg1.test("123"));//true
    
        let reg2 = /\d{3}/;//不需要转义符,推荐使用.创建一个正则表达式对象,匹配有三个数字
        console.log(reg2.test("abc"));//false
        console.log(reg2.test("123"));//true
        
        
        
        //正则表达式修饰符(了解)
        let regi = /[amn]/i;//不区分大小写匹配amn
        let resi = "ABC".match(regi);//从"ABC"中匹配regi模式字符串
        console.log(resi);
        let regg = /\d/g;//全局查找数字
        let resg = "1 plus 2 equals 3".match(regg);
        console.log(resg);
        let regm = /^\d/m;//多行匹配开头的数字
        let resm = "abc1 plus 2 equals 3\n6abcmnk".match(regm);
        console.log(resm);
    
        //2. 会使用如下正则表达式匹配字符串
        let email = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;//创建一个正则表达式
    对象,匹配邮箱格式
        console.log(email.test("123abc"));//false
        console.log(email.test("123abc@qq.com"));//true
    
        let phone = /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/;//创建一个正则表达式,匹配电
    话号码
        console.log(phone.test("123456"));//false
        console.log(phone.test("18312312312"));//true
    
    </script>
    </body>
    </html>
    

    重点案例

    -表单校验

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>案例-表单校验</title>
            <style type="text/css">
                        .regist_bg {
                            width: 100%;
                            height: 600px;
                            padding-top: 40px;
                            background-image: url(../img/bg.jpg);
                        }
                        .regist {
                            border: 7px inset #ccc;
                            width: 700px;
                            padding: 40px 0;
                            padding-left: 80px;
                            background-color: #fff;
                            margin-left: 25%;
                            border-radius: 10px;
                        }
                        input[type="submit"] {
                            background-color: aliceblue;
                            width: 100px;
                            height: 35px;
                            color: red;
                            cursor: pointer;
                            border-radius: 5px;
                        }
                        .warn{
                            color:red;
                            font-size: 12px;
                            display: none;
                        }
            </style>
    <!--
    表单校验
        1. 两次密码输入一致
        2. 邮箱格式正确
        3. 手机号格式正确
        4. 提交表单时校验表单项是否合法.
    总结:
        form表单的 onsubmit 事件 表单提交之前触发,用法实例:
            onsubmit="return 函数()"  函数返回true则表单正常提交,函数返回false则阻止表单提交
    
    -->
        </head>
        <body>
            <div class="regist_bg">
                <div class="regist">
                    <form action="#" onsubmit="return judge()">
                        <table width="700px" height="350px">
                            <tr>
                                <td colspan="3">
                                    <font color="#3164af">会员注册</font> USER 
    REGISTER
                                </td>
                            </tr>
                            <tr>
                                <td align="right">用户名</td>
                                <td colspan="2"><input id="loginnameId" type="text" 
    name="loginname" size="50" /><span id="loginnamewarn"   class="warn">用户名不能为
    空</span> </td>
                            </tr>
                            <tr>
                                <td align="right">密码</td>
                                <td colspan="2"><input id="loginpwdId" 
    type="password" name="loginpwd" size="50" /> </td>
                            </tr>
                            <tr>
                                <td align="right">确认密码</td>
                                <td colspan="2"><input id="reloginpwdId" 
    type="password" name="reloginpwd" size="50" /><span id="pwdwarn" class="warn">密
    码不一致</span> </td>
                            </tr>
                            <tr>
                                <td align="right">Email</td>
                                <td colspan="2"><input id="emailId" type="text" 
    name="email" size="50" /> <span id="emailwarn"  class="warn">邮箱格式有误</span> 
    </td>
                            </tr>
                            <tr>
                                <td align="right">姓名</td>
                                <td colspan="2"><input name="text" name="username" 
    size="50" /> </td>
                            </tr>
                            <tr>
                                <td align="right">性别</td>
                                <td colspan="2">
                                    <input type="radio" name="gender" value="男" 
    checked="checked" />男
                                    <input type="radio" name="gender" value="女" />女
                                </td>
                            </tr>
                            <tr>
                                <td align="right">电话号码</td>
                                <td colspan="2"><input  id="phone"  type="text" 
    name="phone" size="50" /> <span id="phonewarn"  class="warn">手机格式有误</span> 
    </td>
                            </tr>
                            <tr>
                                <td align="right">所在地</td>
                                <td colspan="3">                                
                                    <select id="provinceId" 
    onchange="selectCity(this.value)" style="width:150px">
                                        <option value="">----请-选-择-省----</option>
                                        <option value="0">北京</option>
                                        <option value="1">辽宁省</option>
                                        <option value="2">江苏省</option>
                                    </select>
                                    <select id="cityId" style="width:150px">
                                        <option>----请-选-择-市----</option>
                                    </select>
                                </td>
                            </tr>
                            <tr>
                                <td width="80" align="right">验证码</td>
                                <td width="100"><input type="text" name="verifyCode" 
    /> </td>
                                <td><img src="../img/checkMa.png" /> </td>
                            </tr>
                            <tr>
                                <td></td>
                                <td colspan="2">
                                    <input id="rebtn" type="submit" value="注册" />
                                </td>
                            </tr>
                        </table>
                    </form>
                </div>
            </div>
    <script >
    
        let loginpwdId = document.querySelector("#loginpwdId");//获取密码框
        let reloginpwdId = document.querySelector("#reloginpwdId");//获取确认密码框
        let pwdwarn = document.querySelector("#pwdwarn");//密码警告信息
    
        let emailId = document.querySelector("#emailId");//邮件输入框
        let emailwarn = document.querySelector("#emailwarn");//邮件警告信息
        // 1. 两次密码输入一致
        function pwd(){//校验确认密码
            let boo = loginpwdId.value == reloginpwdId.value;//判断密码是否一致
            if(boo){//合法,隐藏警告
                pwdwarn.style.display = "none";//隐藏
            }else{//不合法,显示警告
                pwdwarn.style.display = "inline";//显示
            }
            return boo;//返回密码是否合法
        }
    
        reloginpwdId.onchange  = pwd;//当确认密码值改变时调用pwd方法执行
        // 2. 邮箱格式正确
        function mail(){//校验邮件格式
            let email = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;//创建一个正则
    表达式对象,匹配邮箱格式
            let boo = email.test(emailId.value);//校验邮件格式
            if(boo){//合法,隐藏警告
                emailwarn.style.display = "none";//隐藏
            }else{//不合法,显示警告
                emailwarn.style.display = "inline";//显示
            }
            return boo;//返回邮件是否合法
        }
    
        emailId.onchange = mail;//当邮件输入框的值改变时调用mail方法执行
    
        // 3. 手机号格式正确
        let phone = /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/;//创建一个正则表达式,匹配电
    话号码
    
        //4. 提交表单时校验表单项是否合法.
        function judge(){//表单提交校验
            return pwd() && mail();//所有表单项都合法才返回true
        }
    
    </script>
    
        </body>
    </html>
    

    -商品全选

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>案例-商品全选</title>
    </head>
    <body>
    <!--
    商品全选
        1. 全选 点击全选按钮,所有复选框都被选中
        2. 反选 点击反选按钮,所有复选框状态取反
    -->
    <button id="btn1">1. 全选</button>
    <button id="btn2">2. 反选</button>
    <br/>
    <input type="checkbox">电脑<input type="checkbox">手机<input type="checkbox">汽车
    <input type="checkbox">别墅<input type="checkbox" checked="checked">笔记本
    <script >
    
        let btn1 = document.querySelector("#btn1");//全选
        let btn2 = document.querySelector("#btn2");//反选
    
        let boxes = document.querySelectorAll('input[type="checkbox"]');//获取所以复选
    框
    
        btn1.onclick = function(){//全选
            for(let b of boxes){
                b.checked = true;//全选
            }
        }
        btn2.onclick = function(){//反选
            for(let b of boxes){
                b.checked = !b.checked;//反选
            }
        }
    
    </script>
    </body>
    </html>
    

    -省市级联

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>案例-省市级联</title>
            <style type="text/css">
                        .regist_bg {
                            width: 100%;
                            height: 600px;
                            padding-top: 40px;
                            background-image: url(../img/bg.jpg);
                        }
                        .regist {
                            border: 7px inset #ccc;
                            width: 600px;
                            padding: 40px 0;
                            padding-left: 80px;
                            background-color: #fff;
                            margin-left: 25%;
                            border-radius: 10px;
                        }
                        input[type="submit"] {
                            background-color: aliceblue;
                            width: 100px;
                            height: 35px;
                            color: red;
                            cursor: pointer;
                            border-radius: 5px;
                        }
            </style>
    
        </head>
        <body>
            <div class="regist_bg">
                <div class="regist">
                    <form action="#">
                        <table width="600" height="350px">
                            <tr>
                                <td colspan="3">
                                    <font color="#3164af">会员注册</font> USER 
    REGISTER
                                </td>
                            </tr>
                            <tr>
                                <td align="right">用户名</td>
                                <td colspan="2"><input id="loginnameId" type="text" 
    name="loginname" size="60" /> </td>
                            </tr>
                            <tr>
                                <td align="right">密码</td>
                                <td colspan="2"><input id="loginpwdId" 
    type="password" name="loginpwd" size="60" /> </td>
                            </tr>
                            <tr>
                                <td align="right">确认密码</td>
                                <td colspan="2"><input id="reloginpwdId" 
    type="password" name="reloginpwd" size="60" /> </td>
                            </tr>
                            <tr>
                                <td align="right">Email</td>
                                <td colspan="2"><input id="emailId" type="text" 
    name="email" size="60" /> </td>
                            </tr>
                            <tr>
                                <td align="right">姓名</td>
                                <td colspan="2"><input name="text" name="username" 
    size="60" /> </td>
                            </tr>
                            <tr>
                                <td align="right">性别</td>
                                <td colspan="2">
                                    <input type="radio" name="gender" value="男" 
    checked="checked" />男
                                    <input type="radio" name="gender" value="女" />女
                                </td>
                            </tr>
                            <tr>
                                <td align="right">电话号码</td>
                                <td colspan="2"><input type="text" name="phone" 
    size="60" /> </td>
                            </tr>
                            <tr>
                                <td align="right">所在地</td>
                                <td colspan="3">                                
                                    <select id="provinceId" style="width:150px">
                                        <option value="">----请-选-择-省----</option>
    
                                    </select>
                                    <select id="cityId" style="width:150px">
                                        <option value="">----请-选-择-市----</option>
                                    </select>
                                </td>
                            </tr>
                            <tr>
                                <td width="80" align="right">验证码</td>
                                <td width="100"><input type="text" name="verifyCode" 
    /> </td>
                                <td><img src="../img/checkMa.png" /> </td>
                            </tr>
                            <tr>
                                <td></td>
                                <td colspan="2">
                                    <input type="submit" value="注册" />
                                </td>
                            </tr>
                        </table>
                    </form>
                </div>
            </div>
    <!--
    省市级联
        1. 页面加载完成后自动装载省数据
        2. 当选中省时,装载该省的市数据
    -->
            <script type="text/javascript">
                //准备省市数据
                let provinceData = ["北京","河北","辽宁"];
                //准备省对应的市数据
                let cityData = {
                    "北京":["顺义区","昌平区","朝阳区"],
                    "河北":["保定","石家庄","廊坊"],
                    "辽宁":["沈阳","铁岭","抚顺"]
                };
    
                let provinceId = document.querySelector("#provinceId");//获取省下拉列
    表
                let cityId = document.querySelector("#cityId");//获取市下拉列表
                //页面加载完成时填充省选项
                window.onload  = function(){//页面加载完成时
                    for(let p of provinceData){//迭代省选项
                        provinceId.innerHTML += "<option value='"+p+"'>"+p+"
    </option>";//追加省选项
                    }
                }
                //当省选项值改变时
                provinceId.onchange = function(){//省选项值改变时
                    //每天填充市数据时先初始化一次
                    cityId.innerHTML = '<option value="">----请-选-择-市----
    </option>';
                    console.log(this.value);//选中的省
                    let citys = cityData[this.value];//当前省对应的市数据
                    //把市数据填充到市选项中
                    for(let c of citys){
                        cityId.innerHTML += "<option value='"+c+"'>"+c+"
    </option>";//追加市选项
                    }
                }
    
            </script>
    
        </body>
    </html>                          
    

    -隔行变色

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>案例-隔行变色</title>
    
        </head>
        <body>
            <table id="tab1" border="1" width="800" align="center">
                <tr >
                    <th width="100px"><input type="checkbox" >全/<input 
    type="checkbox" >反选</th>
                    <th>分类ID</th>
                    <th>分类名称</th>
                    <th>分类描述</th>
                    <th>操作</th>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>1</td>
                    <td>手机数码</td>
                    <td>手机数码类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>2</td>
                    <td>电脑办公</td>
                    <td>电脑办公类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>3</td>
                    <td>鞋靴箱包</td>
                    <td>鞋靴箱包类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>4</td>
                    <td>家居饰品</td>
                    <td>家居饰品类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>5</td>
                    <td>牛奶制品</td>
                    <td>牛奶制品类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>6</td>
                    <td>大豆制品</td>
                    <td>大豆制品类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>7</td>
                    <td>海参制品</td>
                    <td>海参制品类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>8</td>
                    <td>羊绒制品</td>
                    <td>羊绒制品类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>9</td>
                    <td>海洋产品</td>
                    <td>海洋产品类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>10</td>
                    <td>奢侈用品</td>
                    <td>奢侈用品类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>4</td>
                    <td>家居饰品</td>
                    <td>家居饰品类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>4</td>
                    <td>家居饰品</td>
                    <td>家居饰品类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>4</td>
                    <td>家居饰品</td>
                    <td>家居饰品类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>10</td>
                    <td>奢侈用品</td>
                    <td>奢侈用品类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>4</td>
                    <td>家居饰品</td>
                    <td>家居饰品类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>4</td>
                    <td>家居饰品</td>
                    <td>家居饰品类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
                <tr>
                    <td><input type="checkbox" class="checkbox"></td>
                    <td>4</td>
                    <td>家居饰品</td>
                    <td>家居饰品类商品</td>
                    <td><a href="">修改</a>|<a href="">删除</a></td>
                </tr>
            </table>
    <!--
    隔行变色
        1. 表格奇偶行颜色不同
        2. 鼠标移入颜色高亮
    -->
        <script >
            let trs = document.querySelectorAll("table tr");//获取所有的行
            for(let i=0;i<trs.length;i++){
                if(i%2 == 0){//索引是偶数行
                    trs[i].style.backgroundColor ="#efefef";//浅灰色
                }else{//索引是奇数行
                    trs[i].style.backgroundColor ="#ccc";//灰色
                }
                let oldColor = trs[i].style.backgroundColor;//原来的颜色
                trs[i].onmouseover = function(){//鼠标移入的时候
                    this.style.backgroundColor = "pink";//粉色
                }
                trs[i].onmouseout = function(){//鼠标移出的时候
                    this.style.backgroundColor = oldColor;//回复原色
                }
    
            }
    
        </script>
        </body>
    </html>      
    

    老师下午总结

    1. BOM对象

    弹窗

    警告提示框:
        alert("数据加载失败!");
    
    
    确认取消框:
        let flag = confirm("您确定要删除所有数据吗?");
        console.log(flag);//确定返回true, 取消返回false
    
    
    提示输入框:
    let pwd = prompt("请输入密码");
    console.log(pwd);//确定时,返回用户输入的内容;取消时返回null
    

    定时器

    设置定时器:
        setInterval(函数,毫秒数);
            每间隔给定的毫秒值就会执行一次函数。
    
        setTimeout(函数,毫秒数)  
            到达指定的毫秒数后执行一次函数功能。
        
    
     清除定时器:
        clearInterval(定时器编号)
        clearTimeout(定时器编号) 
        每一个定时器调用后都会返回一个唯一的编号,根据定时器编号可以清除对应的定时器。
        
        
     
    两个定时器区别:
        setInterval : 每间隔一段毫秒值就会执行一次,不清除会一直执行。
        setTimeout  : 到达到达指定的毫秒数之后,触发一次定时器的执行,只会执行一次。
    

    location

    1. 获取当前浏览器地址
        location.href
    
    2. 修改浏览器地址
        location.href = "url地址" ;
        
    3. 刷新当前页面
        location.reload();
    

    html css

    js vuejs nodejs

    2. DOM对象

    操作元素

    获取元素对象: 
        1.根据id获取标签元素:  唯一的元素
            document.getElementById("ID") 
            document.querySelector("#ID") 
                
        2.根据class获取多个元素 
            document.getElementsByClassName("class属性值") 
            document.querySelectorAll(".class属性值") 
                
        3.根据标签名称获取多个元素
            document.getElementsByTagName("标签")
            document.querySelectorAll("标签")
        
        4. 根据name属性获取多个元素 
            document.getElementsByName('name属性值')
            document.querySelectorAll([name=name值]) 
        
        5. 获取当前元素的父标签
            element.parentElement  //element表示当前标签对象
       
       
       
       
    操作元素对象:
        1. 创建一个标签对象
            document.createElement("标签名称");
        2. 添加一个子标签
            element.appendChild(子标签对象); //element表示当前标签对象
        3. 移除元素
            element.outerHTML = "" //element表示要移除的标签对象
    

    操作内容

    element.innerText; 获取或者修改元素的纯文本内容
    element.innerHTML; 获取或者修改元素的html内容
    element.outerHTML; 获取或者修改包含自身的html内容
    

    操作属性

    1. 获取或者修改元素对象的属性
        element.属性名 
        
    2. 给元素设置属性(可以设置原生和自定)
        element.setAttribute(属性名,属性值)
        
    3. 获取元素属性值
        element.getAttribute(属性名) 
        
    4. 移除元素的自定义属性
        element.removeAttribute(属性名)
    

    操作样式

    1. 获取或者修改一个css样式
         element.style.驼峰格式样式属性名
    举例: 
         //获取标签宽度
         标签对象.style.width;
         //设置标签宽度
         标签对象.style.width = "400px";
    
    
         
    2. 通过class获取或者设置样式
         element.className
    举例:     
         //获取标签的class属性
         标签对象.className
         //设置class属性值
         标签对象.className = "新值";
      
         
    
    3. 获取或修改style属性的所有样式 (了解)
         element.style.cssText
         
         
    4. 切换class样式(了解)
       element.classList接口,常用方法有四个:
            add() 添加一个class样式
            remove() 移除一个class样式
            contains() 判断是否包含某一个样式
            toggle() 切换一个class样式 有则删除,无则添加
    

    3. 正则表达式

    格式

    格式1:
        /正则表达式/匹配模式 
        
    格式2:
        new RegExp("正则表达式", "匹配模式"); 
        注意:该格式在表示正则表达式的时候需要转义,例如\d,应表示为\\d
    
    匹配模式:
        i 不区分大小写,匹配字符串时不区分大小写
        g 全局匹配 ,匹配到一个之后不停止,匹配字符串的所有内容
        m 多行匹配 ,匹配字符串的所有行的内容
    

    匹配规则

    1.字符匹配
        \b 匹配一个单词边界。'er\b' 可以匹配 "never" 中的 'er',但不能匹配 "verb" 中的 'er'。  
        \B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 
    
        \d 匹配一个数字字符。等价于 [0-9]。  
        \D 匹配一个非数字字符。等价于 [^0-9]。  
    
        \s 匹配任何空白字符,包括空格、制表符、换页符等等。 
        \S 匹配任何非空白字符。 
    
        \w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。  
        \W 匹配任何非单词字符。等价于'[^A-Za-z0-9_]'。
    
        ^ 限定字符串的开始位置。
        $ 限定字符串的结束位置。 
    
    
    
    2.区间匹配
        [xyz]   匹配xyz中的任意一个字符。  
        [^xyz]  匹配除了xyz外的任意一个字符。  
        [a-z]   匹配指定范围内的任意字符。
        [^a-z]  匹配任何不在指定范围内的任意字符。  
        [a-zA-Z0-9] 匹配a-z或者A-Z或者0-9之间的任意一个字符。   
    
    
    
    3.数量匹配
        *   0次到多次 (任意次)
        ?   0次到1次 (有或没有)
        +   1次到多次
        {n}    重复n次
        {n,}   重复n次以上 (>=n次)
        {n,m}  重复n到m次
        
    
    

    API操作

    string对象
        match(/正则表达式/);
        作用:匹配并获取符合正则表达式的内容。
        参数:正则表达式
        返回:匹配成功返回匹配到的字符串数组,失败返回null。
    
    
    RegExp对象
        test("字符串")
        作用:判断正则表达式是否匹配参数中的字符串。
        参数:要匹配的字符串
        返回:匹配成功返回true,否则返回false
        
        
    举例:
     <script>
        let str = "abc123cba456aaa789";
        
        //RegExp对象
        let reg = new RegExp("\\d+","g"); //g表示全局匹配
        //判断是否匹配
        console.log(reg.test(str)); //true
    
        //匹配并获取
        let array = str.match(/\d+/g);
        if(array != null){
            for(let i in array){
                console.log(array[i]); //123 456 789
            }
        }
    </script>
    

    4. 扩展作业

    练习1

    按要求在给定的HTML页面中实现指定功能。
    

    要求:

    在输入框输入信息,点击添加的时候,动态添加一行内容。
    
    点击删除的时候,删除被勾选的行。
    

    HTML页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>练习1</title>   
    </head>
    <body>
    <table width="400" border="1" id="table" align="center" style="border-collapse: collapse">
        <caption><h3>用户信息列表</h3></caption>
        <tr>
            <th>选择</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
        </tr>
        <tr>
            <td><input type="checkbox"/></td>
            <td>张三</td>
            <td>男</td>
            <td>18</td>
        </tr>
        <tr>
            <td><input type="checkbox"/></td>
            <td>李四</td>
            <td>女</td>
            <td>20</td>
        </tr>
    </table>
        <div align="center">
            姓名<input type="text" name="name" value=""/><br/>
            性别<input type="text" name="gender" value=""/><br/>
            年龄<input type="text" name="age" value=""/><br/>
            <button>添加</button>
            <button>删除</button>
        </div>
    </body>
    </html>
    

    参考答案

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>练习1</title>
        
        <script type="text/javascript">
            function addRow() {
                //获取输入框的姓名
                let name = document.querySelectorAll("[name=name]")[0].value;
                //获取性别
                let gender = document.querySelectorAll("[name=gender]")[0].value;
                //获取年龄
                let age = document.querySelectorAll("[name=age]")[0].value;
                if(name=="" || gender=="" || age==""){
                    return;
                }
                //创建tr元素
                let tr = document.createElement("tr");
                //创建单元格
                tr.innerHTML = `<td><input type="checkbox"/></td><td>${name}</td><td>${gender}</td><td>${age}</td>`;
                //往表格中添加tr元素
                let table = document.querySelector("#table");
                table.appendChild(tr);
                //清空输入框
                document.querySelectorAll("[name=name]")[0].value = "";
                document.querySelectorAll("[name=gender]")[0].value = "";
                document.querySelectorAll("[name=age]")[0].value = "";
            }
    
            function deleteRows() {
                //选择所有checkbox元素
                let ckElements = document.querySelectorAll("[type=checkbox]");
                //遍历获取所有被勾选的
                for(let ckbox of ckElements){
                    //判断是否选中
                    if(ckbox.checked){
                        //得到tr元素
                        let tr = ckbox.parentElement.parentElement;
                        //删除tr元素
                        tr.outerHTML = "";
                    }
    
                }
            }
            
        </script>
        
    </head>
    <body>
    
    <table width="400" border="1" id="table" align="center" style="border-collapse: collapse">
        <caption><h3>用户信息列表</h3></caption>
        <tr>
            <th>选择</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
        </tr>
    
        <tr>
            <td><input type="checkbox"/></td>
            <td>张三</td>
            <td>男</td>
            <td>18</td>
        </tr>
        <tr>
            <td><input type="checkbox"/></td>
            <td>李四</td>
            <td>女</td>
            <td>20</td>
        </tr>
    
    </table>
        <div align="center">
            姓名<input type="text" name="name" value=""/><br/>
            性别<input type="text" name="gender" value=""/><br/>
            年龄<input type="text" name="age" value=""/><br/>
            <button onclick="addRow()">添加</button>
            <button onclick="deleteRows()">删除</button>
        </div>
    </body>
    </html>
    

    练习2

    根据给出的HTML页面,实现以下功能。

    要求:

    点击  “获取验证码”  按钮之后,按钮被禁用,鼠标变为不可用图标,30秒之后取消禁用。
    
    按钮上显示 ”n秒后重新获取“,n从30开始倒数显示。
    
    ( 提示:鼠标显示禁用图标的css语法 : cursor: not-allowed  )
    

    效果:

    HTML页面:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>获取验证码按钮</title>
        <script type="text/javascript">
    
        </script>
    </head>
    <body>
        <!--点击按钮后,按钮被禁用,倒数60秒后可重新点击-->
        <button id="btn">获取验证码</button>
    </body>
    </html>
    

    参考答案

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>获取验证码按钮</title>
    
        <script type="text/javascript">
    
            function getVarCode() {
                //将按钮禁用
                let btn = document.querySelector("#btn");
                btn.disabled = true;
                btn.style.cursor = "not-allowed"; //鼠标显示禁用图标
    
                //按钮显示60秒倒计时
                let second = 30;
                let counter = setInterval(function () {
                    second--;
                    if(second>0){
                        btn.innerText = second+"秒后重新获取";
                    }
                },1000);
    
                //60秒时间间隔到了之后清除倒计时,按钮恢复点击功能
                setTimeout(function () {
                    //清除倒计时定时器
                    clearInterval(counter);
                    //按钮恢复
                    btn.innerHTML = "获取验证码";
                    btn.disabled = false;
                    btn.style.cursor = "";
                },30000);
    
            }
    
        </script>
    </head>
    <body>
    
        <!--点击按钮后,按钮被禁用,倒数60秒后可重新点击-->
        <button id="btn" onclick="getVarCode()">获取验证码</button>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:4/09day29_BOM_DOM

          本文链接:https://www.haomeiwen.com/subject/tfvhmhtx.html