[JS-DOM BOM学习笔记]DOM那些儿事儿

DOM简介

文档对象模型,是W3C组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口。

W3C已经定义了一系列的DOM接口,通过这些DOM接口可以改变网页的内容,结构和样式。

DOM树

  • 文档:一个页面就是一个文档,DOM中使用document表示
  • 元素:页面中的所有标签都是元素,DOM中使用element表示
  • 节点:网页中的所有内容都是节点(标签,属性,文本,注释等),DOM中使用node表示
  • DOM把以商内容都看作是对象

获取元素

DOM在我们实际开发中主要用来操作元素。
我们如何来获取页面中的元素呢?
获取页面中的元素可以使用以下几种方式:

  • 根据ID获取
  • 根据标签名获取
  • 通过HTML5新增的方法获取
  • 特殊元素获取

根据ID获取

使用getElementById()方法可以获取带有ID的元素对象。

  • 1.因为我们文档页面从上往下加载,所以先要又标签,所以我们script要写到标签的下面
  • 2.get获得element元素by通过 驼峰命名法
  • 3.参数 id是大小写敏感的字符串
  • 4.返回的是一个元素对象
  • 5.console.dir 打印我们返回的元素对象 更好的查看里面的属性和方法
    <div id="time">2021-5-1</div>
    <script>
        var timer=document.getElementById('time');
        console.log(timer);
        console.log(typeof timer);
        console.dir(timer);
    </script>

根据标签名获取

使用getElementsByTagName()方法可以返回带有指定标签名的对象的集合。

  • 返回的是获取过来元素对象的集合,以伪数组的形式存储的
  • 我们想要一次打印里面的元素对象我们可以采取遍历的方式
  • 如果页面中只有一个元素,返回的还是伪数组的形式
  • 如果页面中没有元素,返回空的伪数组
  • 还可以获取某个元素内部所有指定标签名的子元素element.getElementsByTagName(‘标签名’);
    <ul>
        <li>1233</li>
        <li>1234</li>
        <li>1235</li>
        <li>1236</li>
        <li>1237</li>
    </ul>
    <script>
        var lis=document.getElementsByTagName('li');
        console.log(lis);
        for(var i=0;i<lis.length;i++){
            console.log(lis[i]);
        }
    </script>

H5新增获取元素方式

  • document.getElementsByClassName(‘类名’);//根据类名返回元素对象集合
  • document.querySelector(‘选择器’);//根据指定选择器返回第一个元素对象
  • document.querySelectorAll(‘选择器’);//返回所有的元素
    <div class="box">盒子1</div>
    <div class="box">盒子2</div>
    <div id="nav">
        <ul>
            <li>首页</li>
            <li>产品</li>
        </ul>
    </div>
    <script>
        var boxs=document.getElementsByClassName('box');
        console.log(boxs);
        var firstBox=document.querySelector('.box');//根据指定选择器返回第一个元素对象
        console.log(firstBox);
        var nav=document.querySelector('#nav');//根据指定选择器返回第一个元素对象
        console.log(nav);
        var li=document.querySelector('li');//根据指定选择器返回第一个元素对象
        console.log(li);
        var allBox=document.querySelectorAll('.box');
        console.log(allBox);
    </script>

获取特殊元素(body,html)

  • 获取body元素
        var bodyEle=document.body;
        console.log(bodyEle);
        console.dir(bodyEle);
  • 获取html元素
        // var htmlEle=document.html;
        var htmlEle=document.documentElement;
        console.log(htmlEle);

事件基础

JavaScript使我们又能力创建动态页面,而事件使可以呗JavaScirpt侦测到的行为。
简单理解:触发—响应机制
网页中的每个元素都可以产生某些可以出发JavaScirpt的事件,例如,我们可以在用户点击某按钮时产生一个事件,然后取执行某些操作。

事件是有三部分组成,事件源,事件类型,事件处理程序,我们成为三要素

  • 事件源 事件被触发的对象 谁 按钮
  • 事件类型 如何出发,什么事件,比如鼠标点击(onclick) 还是鼠标经过还是键盘按下
  • 事件处理程序 通过一个函数赋值的方式 完成
    <button id='btn'>啦啦啦啦啦</button>
    <script>
        var btn=document.getElementById('btn')
        btn.onclick=function(){
            alert('哈哈哈哈');
        }
    </script>

常见的鼠标事件

鼠标事件出发条件
onclick鼠标点击左键出发
onmouseover鼠标经过触发
onmouseout鼠标离开触发
onfocus获得鼠标焦点触发
onblur失去鼠标焦点触发
onmousemove鼠标移动触发
onmouseup鼠标弹起触发
onmousedown鼠标按下触发

操作元素

JavaScript的DOM操作可以改变网页内容,结构和样式,我们可以利用DOM操作元素来改变元素里面的内容,属性等,注意以下都是属性

改变元素内容

  • element.innerText
    从其实位置到终止位置的内容,但它去除html标签,同时空格和换行也会去掉
  • element.innerHTML
    起始位置到终止位置的全部内容,包括html标签,同时保留空格和换行
        var btn=document.querySelector('button');
        var div=document.querySelector('div');
        btn.onclick=function(){
            div.innerText=getDate();
        }
        function getDate(){
            var date=new Date();
            var year=date.getFullYear();
            var month=date.getMonth()+1;
            var dates=date.getDate();
            var arr=['星期天','星期一','星期二','星期三','星期四','星期五','星期六'];
            var day=date.getDay();
            return '今天是'+year+'年'+month+'月'+dates+'日'+arr[day];
        }

innerText和innerHTML的区别

前者不识别HTML标签

        div.innerHTML='<strong>今天是</strong> 2021'//字体会改变

常用元素的属性操作

  • innerText,innerHTML改变元素内容
  • src,href
  • id,alt,title
    <button id="41">41</button>
    <button id="42">42</button>
    <br>
    <img src="1.jpg" alt="">
    <script>
        var n41=document.getElementById('41');
        var n42=document.getElementById('42');
        var img=document.querySelector('img');
        n41.onclick=function(){
            img.src='1.jpg';
            img.title='41';
        }
        n42.onclick=function(){
            img.src='2.jpg';
            img.title='42';
        }
    </script>

提供两张图片给大家练习
在这里插入图片描述
在这里插入图片描述

表单元素的属性操作

利用DOM可以操作如下表单元素的属性:
type,value,checked,selected,disabled

  • innerHTML这个是普通盒子比如div 标签里面的内容
  • 表单里面的值 文字内容是通过value来修改的
  • 如果想要某个表单被禁用,不能再点击 disabled 我们想要这个按钮 button禁用
    <button>按钮</button>
    <input type="text" value="输入内容">
    <script>
        var btn=document.querySelector('button');
        var input=document.querySelector('input');
        btn.onclick=function(){
            // input.innerHTML='点击了';
            input.value='被点击了';
            // btn.disabled=true;
            this.disabled=true;
        }
    </script>

样式属性操作

我们可以通过JS修改元素的大小,颜色,位置等样式

  • 1.element.style 行内样式操作
  • 2.element.className 类名样式操作
	//css
    <style>
        div{
            width: 200px;
            height: 200px;
            background-color: pink;
        }
    </style>
    //html
    <div></div>
    //js
    <script>
        var div=document.querySelector('div');
        div.onclick=function(){
            this.style.background='purple';
            this.style.width='250px';
        }
    </script>
    

使用className修改样式属性

直接改变类名
this.className=‘change’;

排他思想

五个按钮,按那哪个按钮,那个就变成粉色,其他的变成白色。

  • 所有元素全部清除样式
  • 给当前元素设置样式
  • 注意顺序不能颠倒
    <button>1</button>
    <button>2</button>
    <button>3</button>
    <button>4</button>
    <button>5</button>
    <script>
        var btns=document.getElementsByTagName('button');
        for(var i=0;i<btns.length;i++){
            btns[i].onclick=function(){
                for(var j=0;j<btns.length;j++)
                    btns[j].style.background='';
                this.style.background ='pink';
            }
        }
        
    </script>

自定义属性的操作

获取属性值

  • element.属性
  • element.getAttribute(‘属性’) 【主要获得自定义的属性(标准)】
    <div class="demo"></div>
    <script>
        var div=document.querySelector('div');
        console.log(div.id);
        console.log(div.getAttribute('id'));
    </script>

设置属性值

  • element.属性=‘值’
  • element.setAttribute(‘属性’,‘值’);
        div.id='test';
        div.setAttribute('id',2);
        console.log(div.id);

移除属性

  • element.removerAttribute(‘属性’);
 div.removeAttribute('id');

案例

仿京东显示隐藏密码明文案例

要学会按F12然后通过元素来改变代码调整元素的位置

    <div class="box">
        <label for="">
            <img src="1.jpg" alt="" id="eye">
        </label>
        <input type="password" name="" id="pwd">
    </div>
    <script>
        var eye=document.getElementById('eye');
        var pwd=document.getElementById('pwd');
        var flag=0;
        eye.onclick=function(){
            if(flag==0){
                pwd.type='text';
                eye.src='1.jpg';
                flag=1;
            }else{
                pwd.type='password';
                eye.src='2.jpg';
                flag=0;
            }

        }
    </script>

仿淘宝关闭二维码案例

display:none隐藏元素 display:block显示元素

    <div class="box">
        <img src="1.jpg" alt="">
        <button>关闭图片</button>
    </div>
    <script>
        var btn=document.querySelector('button');
        var box=document.querySelector('.box');
        btn.onclick=function(){
            box.style.display='none';
        }
    </script>

循环精灵图

其实就是找到图片的规律,然后for循环赋值

        var lis=document.querySelectorAll('li');
        for(var i=0;i<lis.length;i++){
            var index=i*44;
            lis[i].style.backgroundPosition='0 -'+index+'px';
        }

显示隐藏文本框内容

用到两个新的事件,其他的就很简单,然后注意this指针是指绑定的那个元素

    <input type="text" value="phone">
    <script>
        var text=document.querySelector('input');
        text.onfocus=function(){
            // console.log('get');
            if(this.value === 'phone'){
                this.value='';
            }
            this.style.color='#333';
        }
        text.onblur=function(){
            if(this.value === ''){
                this.value='phone';
            }
            this.style.color='#999';
        }
    </script>

密码框验证信息

	//css
	<style>
        .wrong{
            color:red;
        }
        .right{
            color:green;
        }
    </style>
    <div class="register">
        <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){
                // console.log('error');
                message.className='message wrong';
                message.innerHTML='输入位数不对!'
            }else{
                message.className='message right';
                message.innerHTML='输入位数正确!'     
            }
        }
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值