JS:DOM篇

1 DOM编程

1.JavaScript包括的三大语句块:

  • ECMAScript:JS的核心语法(ES规范/ECMA-262标准)
  • DOM:Document Object Model(文档对象模型:对网页当中的节点进行增删改的过程。)HTML文档被当做一棵DOM树来看待。
  • BOM:Browser Object Model(浏览器对象模型)
    关闭浏览器窗口、打开一个新的浏览器窗口、后退、前进、浏览器地址栏上的地址等,都是BOM编程。

2.DOM和BOM的区别和联系?

  • BOM的顶级对象:window
  • DOM的顶级对象:document
  • 实际上BOM是包括DOM

(1) 获取文本框的value

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DOM编程-获取文本框的value</title>
</head>
<body>
    <script type="text/javascript">
        window.onload=function () {
            //以前都省了window,包含document
            var bt=window.document.getElementById("btn1");
            bt.onclick=function () {
                //获取username节点,输入value,得到value
                /*var usernameElt=document.getElementById("username")
                var username=usernameElt.value;//usernameElt.属性,有属性就可以点
                alert(username)*/
                //简写上面
                alert(document.getElementById("username").value);

                //可以修改它的value
                document.getElementById("username").value="zhangsan"
            }
        }
    </script>
    <input type="text" id="username"/><!---文本框输入的值就是value属性值-->
    <input type="button" id="btn1" value="获取文本框的value"/>

    <hr color="red">

    <script type="text/javascript">
        window.onload=function () {
            document.getElementById("setBtn").onclick=function () {
                document.getElementById("username2").value=document.getElementById("username1").value
            }
        }
    </script>

    <input type="text" id="username1"/><br>
    <input type="text" id="username2"/><br>
    <input type="button" value="将第一个文本框中的value赋值到第二个文本框中" id="setBtn"/>

    <!--blur事件:失去焦点事件-->
    <!--以下代码中的this代表的是当前input节点对象,this.value就是这个节点对象的value属性--->
    <input type="text" onblur="alert(this.value)"/>
</body>
</html>

(2) innerHTML和innerText操作div和span

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DOM编程-innerHTML和innerText操作div和span </title>
    <style type="text/css">
        #div1{/*id选择器*/
            background-color: aquamarine;
            width: 300px;
            height: 300px;
            border: 1px black solid;
            position: absolute;
            top: 100px;
            left: 100px;
        }
    </style>
</head>
<body>
    <script type="text/javascript">
        window.onload=function () {
            document.getElementById("btn").onclick=function () {
                //设置div的内容
                //第一步:获取div对象
                var divElt=document.getElementById("div1");
                //第二步:使用innerHTML innerText属性来设置元素内部的内容
                //divElt.innerHTML="快递费缴费即可"
                //divElt.innerHTML="<font color='red'>用户名不能为空!</font>" //用户名不能为空!
                divElt.innerText="<font color='red'>用户名不能为空!</font>"//全部输出
            }
        }
    </script>
    <input type="button" value="设置div中的内容" id="btn"/>
    <div id="div1"></div>
</body>
</html>

(3) 正则表达式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DOM编程-正则表达式</title>
</head>
<body>
    <script type="text/javascript">
        /*
        * 1.什么是正则表达式,有什么用
        *       正则表达式:Regular Expression
        *       正则表达式主要用在字符串格式匹配方面。
        * 2.JS编程的正则表达式:
        *       第一:常见的正则表达式符号要认识,
        *       第二:简单的正则表达式需要会写,
        *       第三:他人编写的正则表达式要看懂,
        *       第四:在JS当中,怎么创建正则表达式对象(new对象)
        *       第五:在JS当中,正则表达式对象有哪些方法(调方法)
        *       第六:要能够快速的从网络上找到自己需要的正则表达式。
        * 3.常见的正则表达式?
        *       . 匹配除换行符以外的任意字符
        *       \w 匹配字母或数字或下划线或汉字
        *       \s 匹配任意的空白符
        *       \d 匹配数字
        *       \b 匹配单词的开始或结束
        *       ^ 匹配字符串的开始
        *       $ 匹配字符串的结束
        *
        *       (重复的都是符号相邻的前面字符)
        *       * 重复零次或更多次
        *       + 重复一次或更多次
        *       ? 重复零次或一次
        *       {n} 重复n次
        *       {n,} 重复n次或更多次
        *       {n,m} 重复n到m次
        *
        *       \W 匹配任意不是字母,数字,下划线,
        *       \S 匹配任意不是空白符的字符
        *       \D 匹配任意非数字的字符
        *       \B 匹配不是单词开头或结束的位置
        *       [^x] 匹配除了x以外的任意字符
        *       [^aeiou] 匹配除了aeiou这几个字母以外的任意字符
        *
        *       正则表达式当中的小括号()优先级较高
        *       [1-9] 表示1到9的任意1个数字(次数是1次)
        *       [A-Z a-z 0-9] 表示A-Z a-z 0-9中的任意1个字符
        *       [A-Z a-z 0-9-] 表示A-Z、a-z、0-9、-,以上所有字符中的任意1个字符
        *       | 表示或者
        *
        * 4.在JS中怎么创建正则表达式对象,怎么调用正则表达式对象的方法?
        *     第一种创建方式: var regExp = /正则表达式/flags;
        *     第二种创建方式: 使用内置支持类RegExp
        *       var regExp= new RegExp("正则表达式","flags")
        *
        * 关于flags:
        *       g:全局匹配
        *       i:忽略大小写
        *       m:多行搜索 (ES规范之后才支持m)当前面是正则表达式的时候,m不能用。只有前面是普通字符串的时候,m才可以使用。
        *
        * 正则表达式对象的test()方法?
        *      true/false=正则表达式对象.test(用户填写的字符串);
        *      true:字符串格式匹配成功
        *      false:字符串格式匹配失败
        * */
        window.onload=function () {
            //给按钮绑定click
            document.getElementById("btn").onclick=function () {
                var email=document.getElementById("email").value;
                var emailRegExp=/^\w+([-+.]\w+)*@\w+([-.]\W+)*\.\w+([-.]\w+)*$/g;
                var ok=emailRegExp.test(email);
                if(ok){
                    document.getElementById("emailError").innerText="邮箱地址合法";
                }else{
                    document.getElementById("emailError").innerText="邮箱地址不合法";
                }
                //给email文本框绑定focus,获得焦点
                document.getElementById("email").onfocus=function () {
                    document.getElementById("emailError").innerText=" ";
                }
            }
        }
    </script>

    <input type="text" id="email"/>
    <span id="emailError" style="color: red;font-size:12px;"></span>
    <input type="button" value="验证邮箱" id="btn"/>
</body>
</html>

(4) 去除字符串

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DOM编程-去除字符串的前后空白trim</title>
</head>
<body>
    <script type="text/javascript">
        window.onload=function(){
            document.getElementById("btn").onclick=function(){
                //获取用户名
                var username = window.document.getElementById("username").value;
                //去除字符串前后空白
                username=username.trim();
                //测试
                alert("-->"+username+"<---")
            }
        }

    </script>
    <input type="text" id="username"/>
    <input type="button" id="btn" value="获取用户名"/>
</body>
</html>

(5) 表单验证

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DOM编程-表单验证</title>
    <style type="text/css">
        span{
            color: red;
            font-size: 12px;
        }
    </style>
</head>
<body>

    <script type="text/javascript">
        window.onload=function () {
            //获取username的span标签
            var usernameErrorSpan=document.getElementById("usernameError");
            //给用户名文本框绑定blur事件
            var usernameElt=document.getElementById("username");
            usernameElt.onblur=function () {
                //获取用户名
                var username=usernameElt.value;
                //去除前后空白
                username=username.trim();
                //判断用户名是否为空
                /*if(username){
                    alert("username="+username)
                }else {
                    alert("username是空字符串")
                }*/
                if(username===""){
                    //用户名为空
                    usernameErrorSpan.innerText="用户名不能为空";
                }else {
                    //用户名不为空,继续判断长度[6-14]
                    if(username.length<6||username.length>14){
                        //用户名非法
                        usernameErrorSpan.innerText="用户名长度必须在[6-14]之间"
                    }else{
                        //长度合法,继续判断是否有特殊符号
                        var regExp=/^[A-Za-z0-9]+$/;
                        var ok=regExp.test(username);
                        if(ok){
                            //用户名合法
                        }else{
                            //用户名中含有特殊符号
                            usernameErrorSpan.innerText="用户名只能由数字和字母组成";
                        }
                    }
                }
                //给username这个文本框绑定获得焦点事件
                usernameElt.onfocus=function () {
                    //清空非法的value
                    if(usernameErrorSpan.innerText !=""){
                        usernameElt.value="";
                    }
                    //清空span
                    usernameErrorSpan.innerText="";
                }
            }

            //获取密码span标签
            var userpwd2ErrorSpan=document.getElementById("userpwd2Error");
            //获取确认密码对象并绑定blur失去焦点事件
            var userpwd2Elt=document.getElementById("userpwd2");
            userpwd2Elt.onblur=function () {
                //获取密码和确认密码
                var userpwdElt=document.getElementById("userpwd");
                var userpwd=userpwdElt.value;
                var userpwd2=userpwd2Elt.value;
                if((userpwd != userpwd2)||userpwd.length==0 || userpwd2.length==0){
                    //密码不一致
                    userpwd2ErrorSpan.innerText="密码不一致或为空";
                }else{

                }
            }
            userpwd2Elt.onfocus=function () {
                if(userpwd2ErrorSpan.innerText !=""){
                    userpwd2Elt.value="";
                }
                userpwd2ErrorSpan.innerText="";
            }

            //span标签
            var emailSpan=document.getElementById("emailError");
            //给email绑定blur事件
            var emailElt=document.getElementById("email");
            emailElt.onblur=function () {
                var email=emailElt.value;
                email=email.trim();
                var emailRegExp=/^\w+([-+.]\w+)*@\w+([-.]\W+)*\.\w+([-.]\w+)*$/g;
                var ok=emailRegExp.test(email);
                if(ok){

                }else{
                    emailSpan.innerText="邮箱地址不合法";
                }
            }
            //绑定focus
            emailElt.onfocus=function () {
                if (emailSpan.innerText !=""){
                    emailElt.value="";
                }
                emailSpan.innerText="";
            }

            //给提交按钮绑定鼠标单击事件,submitBtnElt节点对象代表type="button"
            var submitBtnElt=document.getElementById("submitBtn");
            submitBtnElt.onclick=function () {
                //触发username的blur userpwd2的blur email的blur
                //不需要人工操作,使用纯JS代码触发事件,。
                usernameElt.focus();
                usernameElt.blur();

                userpwd2Elt.focus();
                userpwd2Elt.blur();

                emailElt.focus();
                emailElt.blur();

                //当所有表单都是合法的时候,提交表单
                if(usernameErrorSpan.innerText==""&&userpwd2ErrorSpan.innerText==""&&emailSpan.innerText==""){
                    //提交表单,通过节点来访问form的submit方法
                    //userFormElt这个节点对象就代表form,可以调用form的任何属性。
                    var userFormElt=document.getElementById("userForm");
                    userFormElt.submit();
                }
            }
        }
    </script>
    <!--表单-->
    <form id="userForm" action="http://localhost:8080/jd/save" method="get">
        用户名<input type="text" name="username" id="username"/><span id="usernameError"></span><br>
        密码<input type="text" name="userpwd" id="userpwd"/><br>
        确认密码<input type="text" id="userpwd2"/><span id="userpwd2Error"></span><br>
        邮箱<input type="text" name="email" id="email"/><span id="emailError"></span><br>
        <!-- submit是提交form表单的按钮 <input type="submit" value="注册"/> -->
        <input type="button" value="注册" id="submitBtn">
        <input type="reset" value="重置">
</body>
</html>

2 其他应用

(1)复选框的全选与取消全选

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>复选框的全选和取消全选</title>
</head>
<body>
    <script type="text/javascript">
        window.onload=function () {
            var aihaos=document.getElementsByName("aihao");
            var firstChk=document.getElementById("firstChk");
            firstChk.onclick=function () {
                /*//获取第一个复选框的选中状态
                //alert(firstChk.checked);
                //根据name获取所有元素
                var aihaos=document.getElementsByName("aihao");
                if(firstChk.checked){
                    //全选
                    for (var i=0;i<aihaos.length;i++){
                        aihaos[i].checked=true;
                    }
                }else{
                    //取消全选
                    for (var i=0;i<aihaos.length;i++){
                        aihaos[i].checked=false;
                    }
                }*/
                //简写
                for(var i=0;i<aihaos.length;i++){
                    aihaos[i].checked=firstChk.checked;
                }
            }
            //对以上数组进行遍历
            var all=aihaos.length;
            for(var i=0;i<aihaos.length;i++){
                aihaos[i].onclick=function () {
                    var checkedCount=0;
                    //总数量和选中的数量相等的时候,第一个复选框选中。
                    for(var i=0;i<aihaos.length;i++){
                        if(aihaos[i].checked){
                            checkedCount++;
                        }
                    }
                    if(all==checkedCount){
                        firstChk.checked=true;
                    }else {
                        firstChk.checked=false;
                    }
                }
            }
        }
    </script>
    <input type="checkbox" id="firstChk"/><br>
    <input type="checkbox" name="aihao" value="smoke"/>抽烟<br>
    <input type="checkbox" name="aihao" value="drink"/>喝酒<br>
    <input type="checkbox" name="aihao" value="tt"/>烫头<br>
</body>
</html>

(2) 获取下拉列表选中项的value

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>获取下拉列表选中项的value</title>
</head>
<body>
    <!--<select onchange="alert(this.value)">
        <option value="">&#45;&#45;请选择省份&#45;&#45;</option>
        <option value="001">河北省</option>
        <option value="002">湖北省</option>
        <option value="003">河南省</option>
        <option value="004">吉林省</option>
    </select>-->

    <!--第二种方式-->
    <script type="text/javascript">
        //选择一个省份,弹一个value值。
        window.onload=function () {
            var provinceElt=document.getElementById("province");
            provinceElt.onchange=function () {
               alert(provinceElt.value);
            }
        }
    </script>

    <select id="province">
        <option value="">--请选择省份--</option>
        <option value="001">河北省</option>
        <option value="002">湖北省</option>
        <option value="003">河南省</option>
        <option value="004">吉林省</option>
    </select>
</body>
</html>

(3) 显示网页时钟:Date内置支持类

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>显示网页时钟:Date内置支持类</title>
</head>
<body>
    <script type="text/javascript">
        /*
        * 关于JS内置支持类:Date 可以用来获取时间、日期
        * */
        //获取当前系统时间
        var nowTime=new Date();
        //新的输出alert-->write
        document.write(nowTime);
        document.write("<br>");
        document.write("<br>");
        //转换成具有本地语言环境的日期格式
        nowTime=nowTime.toLocaleString();
        document.write(nowTime);
        document.write("<br>");
        document.write("<br>");

        //当以上格式不是自己想要的,可以通过日期,自己制定格式
        var t=new Date();
        var year=t.getFullYear();
        var month=t.getMonth();//月份是:0——11
        //var day=t.getDay();//获取一周的第几天(0-6)
        var day=t.getDate();//获取日
        document.write(year+"年"+(month+1)+"月"+day+"日");
        document.write("<br>");
        document.write("<br>");

        //重点:获取从1970年1月1日 00:00:00 000到当前系统时间的总毫秒数
        document.write(new Date().getTime());
    </script>

    <script type="text/javascript">
        function displayTime() {
            var time=new Date();
            var strTime=time.toLocaleString();
            document.getElementById("timeDiv").innerHTML=strTime;
        }

        //每隔1秒调用displayTime()函数
        start=function() {
            //从这行代码执行结束开始,则会不间断的每隔1000毫秒调用一次displayTime()函数
           //这里的v没有var是全局变量,方便下面stop调用
            v= window.setInterval("displayTime()",1000);//setInterval周期性的调用函数
        }

        //停止系统时间
        function stop() {
            window.clearInterval(v);//clearInterval取消setInterval周期性的返回值
        }
    </script>
    <br><br>
    <input type="button" value="显示系统时间" onclick="start()"/>
    <input type="button" value="停止系统时间" onclick="stop()">
    <div id="timeDiv"></div>
</body>
</html>

(4) 内置支持类Array

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>内置支持类Array</title>
</head>
<body>
    <script type="text/javascript">
        var arr=[]//创建长度为0的数组
        alert(arr.length);//0

        //数据类型随意
        var arr2=[1,2,3,4,5.6,false,"sad"];
        alert(arr2.length);

        //下标不会越界,自动扩容,没有的赋undefined
        arr2[8]="test";
        document.write("<br><br>");

        //遍历
        for(var i=0;i<arr2.length;i++){
            window.alert(arr2[i]);
        }

        //另一种创建数组的方式
        var a1=new Array()
        document.write(a1.length+"<br>");

        var a2=new Array(3)//3代表长度
        document.write(a2.length+"<br>");

        var a3=new Array(2,3,6,5)//代表数组中的元素
        document.write(a3.length+"<br>");

        var a=[1,2,34,5.6];
        var str=a.join("-");
        document.write(str+"<br>");//1-2-34-5.6

        //在数组末尾添加一个元素(数组长度+1)
        a.push(12);
        document.write(a.join("-")+"<br>");

        //将数组末尾元素弹出(数组长度-1)
        var endElt=a.pop();
        document.write(endElt+"<br>");
        document.write(a.join("+")+"<br>");

        //反转数组
        a.reverse();
        document.write(a.join("=="));
    </script>
</body>
</html>
发布了42 篇原创文章 · 获赞 8 · 访问量 2427

猜你喜欢

转载自blog.csdn.net/JH39456194/article/details/103975583