DOM和BOM

1.DOM

1.1DOM概述

1.dom是处理可扩展标记语言的标准编程接口,可以改变网页的样式,内容和结构
2.文档:一个页面就是一个文档(document)
3.元素:页面中的所有标签都是元素(element)
4.节点:网页中的所有内容都是节点(标签,属性,文本,注释等)(node)
4.对象:文档,元素,节点都是对象 获取元素 1.id获取 getElementByid()

1.2获取元素

获取元素
<script>
  // 1.id获取---id是大小写敏感的字符串
  // console.dir--打印返回的元素对象
  document.getElementById();
  // --------------------------

  //2. 标签名获取--返回的是元素对象的集合(伪数组)--操作里面的对象采用遍历的方式
  document.getElementsByTagName();
  // ------------------------------------------

  // 父元素必须指明是哪一个对象,获取时不包含父元素本身
  element.getElementsByTagName();
  // ---------------------------------------------------

  // 3.获取特殊元素
  // 3.1获取body元素
  document.body;
  // 3.2获取html元素
  document.documentElement;
</script>

1.3事件基础

在这里插入图片描述

(触发响应机制)
组成:
1.事件源:事件被触发的对象 谁
2.事件类型:如何触发 什么事件
3. 事件处理程序:通过函数赋值的方式完成

<script>
    // btn是事件源 onlick是事件类型 function是事件处理程序
    btn.onlick=function(){
        alert('事件')
    }
</script>

1.4 执行步骤

1.获取事件源
2. 绑定事件 注册事件
3.添加事件处理程序

<body>
    <div>123</div>
    <script>
    // 1.获取事件源
    var div=document.querySelector('div');
    //2. 绑定事件 注册事件
        // 3.添加事件处理程序
        div.onlick=function(){
            console.log('执行事件的步骤')
        }
</script>

1.5操作元素

在这里插入图片描述

1.5.1修改元素内容

1.element.innerText(从起始位置到终止位置的内容,但它去除HTML标签,同时换行和空格也会去掉)
2.element.innerHTML(起始位置到终止位置的全部内容,包含html标签,同时保留空格和换行)–较常用
区别:前者不识别html标签,后者识别html标签

<button>显示当前系统时间</button>
    <div>某个时间</div>
    <script>
        // 获取元素
        var btn=document.querySelector('button')
        var div=document.querySelector('div')
        // 注册事件,添加处理程序
        btn.onlick=function(){
            div.innerText='1999'
        }
1.5.2修改元素属性
    <button id="l">1</button>
    <button id="z">2</button>
    <img src="" alt="">
    <script>
        // 修改元素属性
        var w=document.getElementById('l');
        var z=document.getElementById('z');
        var img=document.querySelector('img');
        z.onlick=function(){
            img.src=''
        }
1.5.3表单元素操作

dom可以操作:type,value,checked,selected,disabled
表单里面的值 文字内容是通过value来修改的;如果想要某个表单被禁用,不能再点击 disabled

 <button>按钮</button>
    <input type="text" value="输入内容">
    <script>
// 获取元素
var btn=document.querySelector('button')
var input=document.querySelector('input')
// 注册事件 处理程序
btn.onlick=function(){
    input.value='被点击了'
    
}
    </script>
1.5.6样式操作属性

注:
1.可以通过js修改元素的大小,颜色,位置等样式
2.行内样式操作:element.style–适用于样式较少,功能简单的情况
3.类名样式操作:element.className–通过修改元素的className类名进行更改,会直接覆盖原来的类名
4.如果要保留原先的类名,可以写两个类名
注:样式要采用驼峰命名法,如fontSize,backgroundColor
5.js修改style样式操作,产生的是行内样式,css权重比较高

  .change {
            background-color: #fff;
            font-size: large;
        }
    </style>
</head>
<body>
    <div></div>
    
    <script>
        var div=document.querySelector('div')
        div.οnclick=function(){
            // 行内样式操作
            div.style.backgroundColor='red';
            div.style.fontSize='25px';
            // 类名样式操作-
            this.className='change'
        }
1.5.7自定义操作属性

1.获取属性值
element.属性–获取内置即元素本身自带的属性
element.getAttribute(‘属性’)–获得自定义的属性
2.设置属性值
element.属性=‘值’
element.setAttribute(‘属性’,‘值’)–主要针对自定义属性值
3.移除属性
element.removeAttribute(’属性)
4.H5自定义属性
4.1.自定义属性以data-开头作为属性名并且赋值
4.2.element.getAttribute()
element.dataset.index–只能获取data开头的自定义属性

1.6节点操作

作用:获取元素
节点有nodeType(节点类型),nodeName(节点名称),nodeValue(节点值)这三个基本属性
元素节点nodeType为1,属性节点的节点类型为2,文本节点的节点类型为3(包含文字,空格和换行)

1.6.1节点层级

父子兄层级关系
1.父级节点
node.parentNode–得到离元素最近的父级节点,如果找不到父节点返回null
2.子节点
parentNode.childNodes–获得所有的子节点包含元素节点,文本节点等
如果只想获得里面的元素节点,需要专门处理
parentNode.children–只获得子节点中的元素节点
parentNode.firstChild–返回第一个子节点,找不到则返回null
parentNode.lastChild–返回最后一个子节点,找不到返回null
parentNode.firstElementChild–返回第一个子元素节点
parentNode.lastElementChild–返回最后一个子元素节点
3.兄弟节点
node.nextSibling–下一个兄弟节点
node.previousSibling–上一个兄弟节点
node.nextElementsSibling–下一个兄弟元素节点
node.previousElementSibling–上一个兄弟元素节点

4.动态创建节点
document.creatElement(‘’)
5.添加节点
node.appendChild()
node.insertBefore()

  <script>
        // 创建节点
      var li=document.createElement('li')
        // 添加节点
        ul.appendChild('li')
        var lili=document.createElement('li')
        ul.insertBefore(lili,ul.children[0])
    </script>

6.删除节点
node.removeChild(child)

2.BOM

2.1BOM概述

1.浏览器对象模型,核心是window,它提供了独立于内容而与浏览器窗口进行交互的对象
2.BOM由一系列相关对象构成,并且每个对象都提供了很多方法和属性
3.bom顶级对象是window,dom顶级对象是document
4.bom包含dom
5.它是全局对象,定义在全局作用域中的变量,函数都会变成window对象的属性和方法,在调用时常省略window

2.2窗口加载事件

1.window.οnlοad=function(){}–只能写一次;
2.btn.addEventListener(‘load’,function(){})–次数无限制,load等页面内容全部加载完毕,包含页面dom元素 图片 flash css等等

  <script>
        window.onload=function(){
           var btn=document.querySelector('button') 
           btn.addEventListener('click',function(){
               alert('点击我')
           })
        }
    </script>

2.3调整窗口大小事件

注:只要页面窗口发生变化,就会触发该事件调用处理函数

<script>
    window.addEventListener('resize',function(){
    })
    window.onresize=function(){}
</script>

2.4定时器

setTimeout()定时器
1.在定时器到期后执行
2.window.setTimeout(调用函数,延时时间)–回调函数(时间到了再返回去调用该函数)
3.window可以省略
4.延时时间单位是毫秒。可以省略
5.调用函数可以直接写函数,还可以写 函数名 或者 ‘函数名()’
6.常给定时器赋值一个标识符

<script>
    window.setTimeout(function(){},2000)
</script>

停止setTimeout()定时器
window.clearTimeout(time id);

<script>
  var time1=  window.setTimeout(function(){
        console.log('爆炸')
    },2000)
    btn.addEventListener('click',function(){
        clearTimeout(time1);
    })
</script>

setInterval()定时器
1.window.setTimeout(回调函数,延迟时间)–每隔这个延迟时间,就调用一次,重复调用

停止setInterval()定时器
window.clearInterval(interval Id)

注:1.this指向的是调用它的对象
2.全局作用域或者普通函数中this指向全局对象window(定时器里面的this指向window)
3.构造函数中this指向构造函数的实例
方法调用中谁调用this指向谁

2.5JS执行

js执行队列
js是单线程,同一时间只能做一件事,所有的任务都要排队,于是出现了同步和异步
同步:程序的执行顺序与任务的排列顺序是一致同步的
异步:在做这件事的同时去处理其他任务
本质区别:流水线上各个任务执行顺序不同

js执行顺序
同步任务:都在主线程上执行,形成一个执行栈
异步任务:js的异步是通过回调函数实现的
异步任务:1.普通事件:如click,resize等
2,资源加载:如load,error等
3.定时器:包含setInterval,setTimeout等

js执行机制
1.先执行执行栈中的同步任务
2.异步任务(回调函数)放入任务队列中
3.一旦执行栈中的所有同步任务执行完毕,系统会按次序读取任务队列中的异步任务,于是被读取的
异步任务结束等待状态,进入执行栈,开始执行

2.6location对象

在这里插入图片描述
在这里插入图片描述

1.location.href获取url

<script>
    btn.addEventListener('click',function(){
        location.href='http://www.itcast.cn'
    })
</script>

2.location.assign()–跳转页面(重定向页面)
3.location.replace()–替换当前页面,因为不记录历史,所以不能后退页面
4.location.reload()–重新加载页面,即直接刷新

2.7navigator对象

包含有关浏览器的信息,他有很多属性,最常用的是userAgent,该属性可以返回由客户机发送服务器的user-agent头部的值

2.8history对象方法

1.back()–后退功能
2.forword()–前进功能
3.go(参数)–前进后退功能,参数如果是1前进一个页面;如果是-1后退一个页面

3.操作实例

3.1页面跳转

<title>页面跳转</title>
</head>
<body>
    <button>点击</button>
    <div>在5秒后跳转</div>
    <script>
        var btn=document.querySelector("button")
        
        btn.addEventListener('click',function(){
            location.href='http://'
        })
        var timer=5
        setInterval(function(){
            if(timer==0)
            {
                location.href='http://'
            }
            div.innerHTML='您将在'+timer+'秒钟后跳转页面'
            timer--;
            
        },5000)
    </script>

3.2分时问候

 <title>分时问候</title>
</head>
<body>
    
    <img src="../js操作实例/上午好.webp" alt="">
    <script>
        var img=document.querySelector('img')
        var div=document.querySelector('div')
        var date=new Date();
        var h=date.getHours();
        if(h<12)
        {
            img.src='../js操作实例/上午好.webp'
        }else
        {
            img.src='../js操作实例/下午好.webp'
        }
    </script>

3.3关闭广告

<title>关闭广告</title>
    <style>
      .box {
        display: block;
        position: relative;
        width: 74px;
        height: 88px;
      }
      .box img {
        width: 60px;
        margin-top: 5px;
      }
      .close-btn {
        position: absolute;
        cursor: pointer;
      }
    </style>
  </head>
  <body>
    <div class="box">
      二维码
      <img src="../js操作实例/二维码.webp" alt="" />
      <i class="close-btn">×</i>
    </div>
    <script>
      var btn = document.querySelector(".close-btn");
      var box = document.querySelector(".box");
      btn.onclick = function () {
        box.style.display = "none";
      };
    </script>

3.4密码提示信息

<title>密码提示</title>
    <style>
        .message {
            display: inline-block;
            font-size: 12px;
            color: #999;

        }
        .wrong {
            color: red;
            /* background-image: url(); */
        }
        .right {
            color: green;
        }
    </style>
</head>
<body>
    <div class="box">
        <input type="password" class="ipt">
        <p class="message">请输入6-16位密码</p>
    </div>
<script>
var ipt=document.querySelector('.ipt')
var message=document.querySelector('.message')
ipt.onblur=function(){
    if(this.value.length<6||this.value.length>16){
        message.className='message wrong'
        message.innerHTML='您输入的位数不对'
    }
    else
    {
        message.className='message right'
        message.innerHTML='您输入的位数正确'
    }
}


</script>

运行结果:
在这里插入图片描述

3.5下拉菜单

 <title>下拉菜单</title>
  </head>
  <body>
    <ul class="nav">
      <li>
        <a href="">微博</a>
        <ul>
          <li>
            <a href="">私信</a>
          </li>
          <li><a href="">评论</a></li>
        </ul>
      </li>
    </ul>
    <script>
      var nav = document.querySelector(".nav");
      var lis = nav.children; //获取li
      for (var i = 0; i < lis.length; i++) {
        lis[i].onmouseover = function () {
          this.children[1].style.display = "block";
        };
        lis[i].onmouseout = function () {
          this.children[1].style.display = "none";
        };
      }
    </script>

3.6密码显示

 <title>显示密码</title>
    <style>
      .box {
        width: 400px;
        border: 1px red solid;
        margin: 100px auto;
        position: relative;
      }
      .box input {
        width: 370px;
        height: 30px;
        border: 0;
        outline: none;
      }
      .box img {
        width: 24px;
        position: absolute;
        top: 2px;
        right: 2px;
      }
    </style>
  </head>
  <body>
    <div class="box">
      <label for="../js操作实例/睁眼.webp">
        <img src="../js操作实例/闭眼.webp" alt="" id="eye" />
      </label>
      <input type="password" id="=pwd" />
    </div>

    <script>
      var eye = document.getElementById("eye");
      var pwd = document.getElementById("pwd");
      var flag=0;
      eye.onclick = function () {
    
        if(flag==0){
            flag=1; 
           pwd.type = "text";
           eye.src='../js操作实例/睁眼.webp'
        }
        else {
           
           pwd.type='password';
           eye.src="../js操作实例/闭眼.webp";
           flag=0;  
        }
       
      };
    </script>
  </body>
</html>

3.7消除广告

  <title>消除广告</title>
</head>
<body>
    <img src="../js操作实例/上午好.webp" alt="" class="ad">
    <script>
        var ad=document.querySelector('.ad')
        setTimeout(function(){
            ad.style.display='none'
        },3000)
    </script>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值