• JS之BOM、DOM


      一、BOM对象

      1,window对象

      所有浏览器都支持window对象,从概念上讲:一个HTML文档对应一个window对象,从功能上讲:控制浏览器窗口的,从使用上讲:window对象不需要创建对象,直接使用即可

      2,window对象方法

    alert()            显示带有一段消息和一个确认按钮的警告框。
    confirm()          显示带有一段消息以及确认按钮和取消按钮的对话框。
    prompt()           显示可提示用户输入的对话框。
    
    open()             打开一个新的浏览器窗口或查找一个已命名的窗口。
    close()            关闭浏览器窗口。
    
    setInterval()      按照指定的周期(以毫秒计)来调用函数或计算表达式。
    clearInterval()    取消由 setInterval() 设置的 timeout。
    setTimeout()       在指定的毫秒数后调用函数或计算表达式。
    clearTimeout()     取消由 setTimeout() 方法设置的 timeout。
    scrollTo()         把内容滚动到指定的坐标。

      3,方法的使用

      3.1弹窗方法,警告窗alert、确认窗confirm、输入窗prompt

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script>
            function waring() {
                alert('小心点')
            }
            function certain() {
                var status=confirm('确定跳转?');
                if (status){
                    location.href='http://www.baidu.com';
            }
            }
            function shuru() {
                var content=prompt('请输入');
                console.log(content)
            }
        </script>
    </head>
    <body>
        <button onclick="waring()">警告窗</button>
        <button onclick="certain()">确认窗</button>
        <button onclick="shuru()">输入窗</button>
    </body>
    </html>

      3.2 setinterval:间隔指定的毫秒数不停的执行指定的代码、clearInterval:停止方法

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script>
            function gettime() {
                let now=new Date().toLocaleString();
                let ss=document.getElementById('content');
                ss.value=now;
            }
            var id;
            function settime() {
                if (id==undefined){
                    gettime();
                    id=setInterval(gettime,1000);    #每1000毫秒(即1秒)后执行
                }
            }
            function over() {
                clearInterval(id);
                id=undefined
            }
        </script>
    </head>
    <body>
        <input type="text" id="content">
        <button onclick="settime()">start</button>
        <button onclick="over()">end</button>
    </body>
    </html>

      3.3 settimeout():在指定的毫秒数后执行代码,cleartimeout():停止

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <button onclick="set()">执行</button>
        <button onclick="cle()">停止</button>
        <p id="p1">欢迎光临</p>
        <script>
            var id;
            function set(){
                id=setTimeout(function () {
               document.getElementById('p1').innerHTML='谢谢'
            },3000)
            }
            function cle() {
                clearTimeout(id)
            }
        </script>
    </body>
    </html>

      二、DOM对象

      HTML document object model(文档对象模型)

      1,DOM树,展示文档中各个对象的关系,用于导航

      2,节点关系

      3,节点查找方法

      3.1 直接查找

    document.getElementById();   #通过id查找,得到是一个准确标签
    document.getElementsByClassName();      #通过类查找,不管同一类有几个标签,得到都是由同一类标签组成的数组
    document.getElementsByTagName();        #通过标签名查找,不管同一种标签有几个,得到的都是由同一种标签组成的数组
    document.getElementsByName();      #通过name属性查找,返回的是同一name值的标签组成的数组
    注意:涉及寻找元素,注意<script>的位置,写在被查找标签后面

      3.2 导航查找

    '''
    
    parentElement           // 父节点标签元素
    
    children                // 所有子标签
    
    firstElementChild       // 第一个子标签元素
    
    lastElementChild        // 最后一个子标签元素
    
    nextElementtSibling     // 下一个兄弟标签元素
    
    previousElementSibling  // 上一个兄弟标签元素
    
    '''
    注意:是没法直接找到所有的兄弟标签

      4,节点操作

    创建节点
    var tag=document.createElement(标签名)
    var father=document.Element.....
    添加节点 追加一个子节点 father.appendchild(tag) 在father标签里加一个tag标签 在某个节点前面加一个节点 var ele=document.getElement..... father.insertbefore(tag,ele) 在father标签里的ele节点前加上tag节点

    删除节点
    var ele=document.getElement.....
    father.removechild(ele) 删除father标签里的ele节点

    替换节点
    var ele=document.getElement.....
    father.replace(tag,ele) 把father标签里的ele节点换成tag新节点
    注意:所有的添加、删除、替换节点都是基于父级标签来操作的。创建几个节点,就最多可以添加几个节点。比如创建一个节点,最多添加几个节点
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div class="c2">
            <button class="c1">添加节点</button>
            <p>这是一个寂寞的天,下着有些伤心的雨</p>
            <button class="c3">删除节点</button><br>
            <button class="c4">替换节点</button>
        </div>
        <script>
            var ele =document.getElementsByClassName('c1')[0];
            var ele1=document.getElementsByClassName('c2')[0];
            ele.onclick=function () {
               var tag=document.createElement('a');
               tag.setAttribute('href','#');
               tag.innerHTML='点我';
               ele1.appendChild(tag);
               var tag1=document.createElement('p');
               tag1.innerHTML='我哭了';
               var ele3=document.getElementsByTagName('p')[0];
               ele1.insertBefore(tag1,ele3);
            };
            var ele2=document.getElementsByClassName('c3')[0];
            var ele3=document.getElementsByTagName('p')[0];
            ele2.onclick=function () {
                ele1.removeChild(ele3)
            };
            var ele4=document.getElementsByClassName('c4')[0];
            ele4.onclick=function () {
                var tag1=document.createElement('p');
                tag1.innerHTML='下雨管你吊事,干活去';
                tag1.setAttribute('style','font-size:30px');
                ele1.replaceChild(tag1,ele3);
            }
        </script>
    </body>
    </html>
    节点操作例子

      5,节点属性操作

      5.1 文本操作:innerHTML,innerText

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div class="c1"><a href="#">欢迎来电</a></div>
        <script>
            var t1=document.getElementsByClassName('c1')[0].innerHTML;
            var t2=document.getElementsByClassName('c1')[0].innerText;
            console.log(t1);
            console.log(t2);
        </script>
    </body>
    </html>
    innerHTML拿到的是对应标签里包含的所有内容,包括标签,比如上面的例子拿到‘<a href="#">欢迎来电</a>
    innerText拿到的只是内容,没有标签,比如上面的例子就只拿到‘欢迎来电’,而没有a标签

      5.2 属性操作

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .c1{
                background-color: yellow;
            }
            .c2{
                color: white;
            }
            .c3{
                font-size: 30px;
            }
        </style>
    </head>
    <body>
        <div id="d1">你好啊</div>
        <button onclick="set1()">加背景</button>
        <button onclick="set2()">加背景,字体颜色,字体大小</button>
        <button onclick="rem1()">去掉class属性</button>
        <button onclick="get1()">拿到class属性</button>
        <script>
            var ele=document.getElementById('d1');
            function set1(){
                ele.setAttribute('class','c1')        #给标签设置属性,第一个参数为属性名,第二参数为属性值
            }
            function set2() {
                ele.setAttribute('class','c1 c2 c3')
            }
            function rem1() {
                ele.removeAttribute('class')         #把标签的某个属性给删除,参数为属性名
            }
            function get1() {
                var va=ele.getAttribute('class');        #拿到标签的某个属性值,参数为属性名
                console.log(va)
            }
        </script>
    </body>
    </html>

      5.3 class属性操作

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            div{
                background-color: grey;
                color: yellow;
                font-size: 20px;
                margin-bottom: 5px;
            }
            ul{
                list-style: none;
            }
            .hh{
                display: none;
            }
        </style>
    </head>
    <body>
        <div class="c1">菜单一</div>
        <ul class="hh">
            <li>111</li>
            <li>111</li>
            <li>111</li>
        </ul>
        <div class="c1">菜单二</div>
        <ul class="hh">
            <li>222</li>
            <li>222</li>
            <li>222</li>
        </ul>
        <div class="c1">菜单三</div>
        <ul class="hh">
            <li>333</li>
            <li>333</li>
            <li>333</li>
        </ul>
        <script>
            var eles=document.getElementsByClassName('c1');
            for ( var i=0;i<eles.length;i++){
                eles[i].onclick=function () {
                    for (var j=0;j<eles.length;j++){
                        if (eles[j]!=this){
                            eles[j].nextElementSibling.classList.add('hh')     #在标签的class属性列表里加‘hh类’。若已经存在,就不用添加
                        }
                    }
                    this.nextElementSibling.classList.remove('hh')          #把标签的class属性列表里删除‘hh类’,若不存在,就不用删除
                }
            }

      5.4 改变css样式

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <p id="p1">这是一个寂寞的天,下着有些伤心的雨</p>
    </body>
        <script>
            document.getElementById('p1').style.color='red';
            document.getElementById('p1').style.fontSize='30px';
        </script>
    </html>
    注意:对于中间用—连接的属性,在这里中间的—给去掉。比如font—size写成fontSize,后面的单词首字母大写

      5.5 value操作

    对于input,select,textarea标签来说,可以.value获取到value值

       6,事件

      6.1 事件分类

    onclick        当用户点击某个对象时调用的事件句柄。
    ondblclick     当用户双击某个对象时调用的事件句柄。
    
    onfocus        元素获得焦点。               练习:输入框
    onblur         元素失去焦点。               应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
    onchange       域的内容被改变。             应用场景:通常用于表单元素,当元素内容被改变时触发.(三级联动)
    
    onkeydown      某个键盘按键被按下。          应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
    onkeypress     某个键盘按键被按下并松开。
    onkeyup        某个键盘按键被松开。
    
    onload         一张页面或一幅图像完成加载。
    
    onmousedown    鼠标按钮被按下。
    onmousemove    鼠标被移动。
    onmouseout     鼠标从某元素移开。
    onmouseover    鼠标移到某元素之上。
    onmouseleave   鼠标从元素离开
    
    onselect       文本被选中。
    onsubmit       确认按钮被点击。

      6.2 绑定事件方法

      方法一:

    <div id="div" onclick="foo(this)">点我呀</div>
    
    <script>
        function foo(self){           // 形参不能是this;
            console.log("点你大爷!");
            console.log(self);   
        }
    </script>

      方法二:

    <p id="abc">试一试!</p>
    
    <script>
    
        var ele=document.getElementById("abc");
    
        ele.onclick=function(){
            console.log("ok");
            console.log(this);    // this直接用
        };
    
    </script>

      6.3 事件介绍

      onload:给body元素加onload,意味着页面内容被加载完成然后做某事,应用场景:有些动作需要在页面加载完成后立即执行,就可以用这属性

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
        <script>
             /*
                  window.onload=function(){
                       var ele=document.getElementById("ppp");
                       ele.onclick=function(){
                       alert(123)
                    };
                 };
             
             */
    
    
    
              function fun() {
                  var ele=document.getElementById("ppp");
                   ele.onclick=function(){
                    alert(123)
                };
              }
    
        </script>
    </head>
    <body onload="fun()">
    
    <p id="ppp">hello p</p>
    
    </body>
    </html>
    View Code

      onsubmit:当表单提交触发,该属性只能给form元素使用。在表单提交前验证用户输入是否正确,如果验证失败,在该方法中我们应该阻止表单的提交

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
        <script>
    
            window.onload=function(){
                //阻止表单提交方式1().
                //onsubmit 命名的事件函数,可以接受返回值. 其中返回false表示拦截表单提交.其他为放行.
    
                 var ele=document.getElementById("form");
                 ele.onsubmit=function(event) {
                //    alert("验证失败 表单不会提交!");
                //    return false;
    
                // 阻止表单提交方式2 event.preventDefault(); ==>通知浏览器不要执行与事件关联的默认动作。
                 alert("验证失败 表单不会提交!");
                 event.preventDefault();
    
        }
    
            };
    
        </script>
    </head>
    <body>
    
    <form id="form">
                <input type="text"/>
                <input type="submit" value="点我!" />
    </form>
    
    </body>
    </html>
    View Code

      onselect:

    <input type="text">
    
    <script>
        var ele=document.getElementsByTagName("input")[0];
    
        ele.onselect=function(){
              alert(123);
        }
    
    </script>
    View Code

      onchange:

    <select name="" id="">
        <option value="">111</option>
        <option value="">222</option>
        <option value="">333</option>
    </select>
    
    <script>
        var ele=document.getElementsByTagName("select")[0];
    
        ele.onchange=function(){
              alert(123);
        }
    
    </script>
    View Code

      onkeydown:

    <input type="text" id="t1"/>
    
    <script type="text/javascript">
    
        var ele=document.getElementById("t1");
    
        ele.onkeydown=function(e){
    
            e=e||window.event;
    
            var keynum=e.keyCode;
            var keychar=String.fromCharCode(keynum);
    
            alert(keynum+'----->'+keychar);
    
        };
    
    </script>
    View Code

      7,实例

      7.1 二级联动

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div>
            <select name="pro" id="i1">
                <option value="0">请选择省份</option>
                <option value="1">四川省</option>
                <option value="2">广东省</option>
                <option value="3">河南省</option>
            </select>
            <select name="citys" id="i2">
                <option value="0">请选择城市</option>
            </select>
        </div>
        <script>
            var related={'1':['成都','绵阳','南充','泸州','宜宾'],'2':['广州','深圳','珠海','中山','汕头'],'3':['焦作','郑州','洛阳','新乡','驻马店']};
            var ele=document.getElementById('i1');
            ele.onchange=function () {
                var list1=related[this.value];
                var father=document.getElementById('i2');
                father.length=1;
                for (var i=0;i<list1.length;i++){
                    var new1=document.createElement('option');
                    new1.innerText=list1[i];
                    father.appendChild(new1);
                }
            }
        </script>
    </body>
    </html>
    View Code

      7.2 导航栏

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            #d1{
                background-color: darkgray;
                width: 100%;
            }
            .c1{
                width: 500px;
                margin: 0 auto;
                color: blue;
                font-size: 30px;
            }
            .c3{
                width: 1100px;
                margin: 0 auto;
                margin-top: 50px;
            }
            img{
                width: 200px;
            }
            .hidde{
                display: none;
            }
        </style>
    </head>
    <body>
        <div id="d1" onmouseover="xiaoshi()">
            <div class="c1">
                <span class="c2" id="s1">电脑</span>&nbsp;&nbsp;&nbsp;&nbsp;
                <span class="c2" id="s2">手机</span>&nbsp;&nbsp;&nbsp;&nbsp;
                <span class="c2" id="s3">家电</span>&nbsp;&nbsp;&nbsp;&nbsp;
                <span class="c2" id="s4">照相机</span>
            </div>
        </div>
        <div class="c3">
            <div class="cc s1 hidde">
                <img src="11.jpg" alt="" >
                <img src="12.jpg" alt="" >
                <img src="13.jpg" alt="" >
                <img src="14.jpg" alt="" >
                <img src="15.jpg" alt="" ></div>
            <div class="cc s2 hidde">
                <img src="21.jpg" alt="" >
                <img src="22.jpg" alt="" >
                <img src="23.jpg" alt="" >
                <img src="24.jpg" alt="" >
                <img src="25.jpg" alt="" ></div>
            <div class="cc s3 hidde">
                <img src="31.jpg" alt="" >
                <img src="32.jpg" alt="" >
                <img src="33.jpg" alt="" >
                <img src="34.jpg" alt="" >
                <img src="35.jpg" alt="" ></div>
            <div class="cc s4 hidde">
                <img src="41.jpg" alt="" >
                <img src="42.jpg" alt="" >
                <img src="43.jpg" alt="" >
                <img src="44.jpg" alt="" >
                <img src="45.jpg" alt="" ></div>
        </div>
        <script>
            var lists=document.getElementsByClassName('c2');
            for (var i=0;i<lists.length;i++){
                lists[i].onmouseover=function () {
                    var eles=document.getElementsByClassName('cc');
                    for (var j=0;j<eles.length;j++){
                        eles[j].classList.add('hidde');
                    }
                    this.setAttribute('style','background-color:white');
                    var ele=document.getElementsByClassName(this.id)[0];
                    ele.classList.remove('hidde');
                    };
                lists[i].onmouseleave=function () {
                    // var ele=document.getElementsByClassName(this.id)[0];
                    this.removeAttribute('style');
                    // ele.classList.add('hidde');
                }
                }
            // function xiaoshi() {
            //      var ss=document.getElementsByClassName('cc');
            //         for (var j=0;j<ss.length;j++){
            //             ss[j].classList.add('hidde');
            //         }
            // }
        </script>
    </body>
    </html>
    View Code

      7.3三级联动

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div>
            <select name="pro" id="i1">
                <option value="0">请选择省份</option>
                <option value="1">四川省</option>
                <option value="2">广东省</option>
                <option value="3">河南省</option>
            </select>
            <select name="citys" id="i2">
                <option value="0">请选择城市</option>
            </select>
            <select name="qu" id="i3">
                <option value="0">请选择区</option>
            </select>
        </div>
        <script>
            var related={'1':['成都','绵阳','南充','泸州','宜宾'],'2':['广州','深圳','珠海','中山','汕头'],'3':['焦作','郑州','洛阳','新乡','驻马店']};
            var relate1={'11':['金牛区','锦江区'],'12':['校区','大区'],'13':['阆中','禁区'],'14':['纳溪区','江阳区'],'15':['翠屏区','蓝池区'],
                        '21':['广1','广2'],'22':['深1','深2'],'23':['珠1','珠2'],'24':['中1','中2'],'25':['汕1','汕2'],
                        '31':['焦1','焦2'],'32':['郑1','郑2'],'33':['洛1','洛2'],'34':['新1','新2'],'35':['驻1','驻2']};
            var ele=document.getElementById('i1');
            ele.onchange=function () {
                var list1=related[this.value];
                var father=document.getElementById('i2');
                var father1 = document.getElementById('i3');
                father1.length=1;
                father.length=1;
                for (var i=0;i<list1.length;i++){
                    var new1=document.createElement('option');
                    new1.innerText=list1[i];
                    var n=i+1+this.value*10;
                    new1.setAttribute('value',n);
                    father.appendChild(new1);
                }
            };
            var ele1=document.getElementById('i2');
            ele1.onchange=function () {
                var list2 = relate1[this.value];
                var father1 = document.getElementById('i3');
                father1.length = 1;
                for (var m=0; m<list2.length; m++) {
                    var new2 = document.createElement('option');
                    new2.innerText = list2[m];
                    var n1 =m +1+this.value *10;
                    new2.setAttribute('value', n1);
                    father1.appendChild(new2);
                }
            }
        </script>
    </body>
    </html>
    View Code

      7.4模态对话框

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .c2{
                width: 100%;
                height:1000px;
                background-color: grey;
                position: absolute;
                left:0;
                top:0;
                opacity: 0.4;
            }
            .c3{
                width: 300px;
                height: 300px;
                background-color: white;
                position: fixed;
                top:300px;
                left:900px;
            }
            .hide{
                display: none;
            }
        </style>
    </head>
    <body>
        <button class="c1" onclick="set()">entry</button>
        <div class="c2 hide"></div>
        <div class="c3 hide">
            <button onclick="relea()">关闭</button><br>
            这是一个寂寞的天,下着有些伤心的雨
            这是一个寂寞的天,下着有些伤心的雨
            这是一个寂寞的天,下着有些伤心的雨
            这是一个寂寞的天,下着有些伤心的雨
            这是一个寂寞的天,下着有些伤心的雨
            这是一个寂寞的天,下着有些伤心的雨
        </div>
        <script>
            function set() {
                var eles=document.getElementsByTagName('div');
                for (var i=0;i<eles.length;i++){
                    eles[i].classList.remove('hide')
                }
            }
            function relea() {
                var eles = document.getElementsByTagName('div');
                for (var i = 0; i < eles.length; i++) {
                    eles[i].classList.add('hide')
                }
            }
        </script>
    </body>
    </html>
    View Code
  • 相关阅读:
    java-信息安全(十)-签名002-数字签名算法DSA
    java-信息安全(九)-https002-基于DH,非对称加密,对称加密等理解
    java-信息安全(八)-密钥交换/协商机制、迪菲-赫尔曼(DH)密钥交换
    java-信息安全(七)-https001-基于非对称加密,对称加密等理解
    java-信息安全(六)-签名001-基于RSA理解数字签名示例
    java-信息安全(四)-非对称加密算法001-RSA
    java-信息安全(五)-数据签名、数字证书
    java-信息安全(三)-PBE加密算法
    java-信息安全(二)-对称加密算法工作模式ECB,CBC,CRT、DES,3DES,AES,Blowfish,RC2,RC4
    信息安全(一)-编码算法【base64编码、base58编码】、哈希算法【MD、sha、RipeMD-XX、hamc】
  • 原文地址:https://www.cnblogs.com/12345huangchun/p/10171146.html
Copyright © 2020-2023  润新知