js必会的DOMBOM操作

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

DOM

DOM—文档对象模型,处理可扩展标记语言的标准编程接口
在这里插入图片描述
文档:一个页面
元素:页面中所有标签
节点:网页中所有内容(标签、属性、文本、注释等)
DOM把以上内容都看作是对象

获取元素

获取页面中的元素的方式:

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

getElementByld()
在这里插入图片描述

getElementsByTagName()

在这里插入图片描述

在这里插入图片描述

element.getElementsByTagName(‘标签名’);

注:父元素必须是单个对象(必须指明是哪个元素对象),获取的时候不包括父元素自己

在这里插入图片描述

在这里插入图片描述

事件三要素

  • 事件源:事件被触发的对象
  • 事件类型:如何触发 什么事件
  • 事件处理程序:通过一个函数赋值的方式完成

执行事件的步骤

  1. 获取事件源
  2. 注册事件(绑定事件)
  3. 添加事件处理程序(采取函数赋值形式)
    在这里插入图片描述

改变元素内容
在这里插入图片描述
在这里插入图片描述
返回系统当前时间:
在这里插入图片描述

在这里插入图片描述

  • innerText不识别html标签 非标准 去除空格和换行
  • innerHTML识别 W3C标准 保留空格和换行
  • 两属性可读写 可获取元素里的内容

在这里插入图片描述

修改元素属性
在这里插入图片描述
在这里插入图片描述

分时显示不同图片,显示不同问候语
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

//1.获取元素
var img=document.querySelector('img');
var div=document.querySelector('div');
//2.得到当前的小时
var date=new Date();
var h=date.getHours();
//3.判断小时改变图片和文字信息
if(h<12){
  img.src='';
  div.innerHTML='上午好';
}else if(h<18){
  img.src='';
  div.innerHTML='下午好';
}else{
  img.src='';
  div.innerHTML='晚上好';
}

表单
在这里插入图片描述
在这里插入图片描述
this.disabled=true;也可

案例:仿京东显示密码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
//删掉一个id=‘’

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

//获取元素
var eye=document.getElementById('eye');
var pwd=document.getElementById('pwd');
//注册事件
var flag=0;
eye.onclick=function(){
  if(flag==0){
     pwd.type='text';
     eye.src='图片';
     flag=1;//赋值操作
  }else{
      pwd.type='password';
      eye.src='图片';
      flag=0;
  }
}

样式属性
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

仿淘宝关闭二维码
在这里插入图片描述
在这里插入图片描述

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

//获取元素
var btn=document.querySelector('.close-btn');
var boc=document.querySelector('.box');
//注册事件
btn.onclick=function(){
  box.style.display='none';
}

案例:循环精灵图背景
for循环
在这里插入图片描述

//获取元素
var lis=document.querySelectorAll('li');
for(var i=0;i<lis.length;i++){
//让索引号*44就是每个li的背景y坐标
   var index=i*44;
   lis[i].style.backgroundPosition='0 -'+index+'px';
}

案例:显示隐藏文本框内容
在这里插入图片描述
在这里插入图片描述

//获取元素
var text=document.querySelector('input');
//注册事件 获得焦点事件 onfocus
text.onfocus=function(){
   //console.log('得到焦点');
   if(this.value==='手机'){
     this.value='';
   }
   //获得焦点需要把文本框里文字颜色变黑
   this.style.color='#333';
}
//注册事件失去焦点 onblur
text.onblur=function(){
   //console.log('失去焦点');
   if(this.value===''){
     this.value='手机';
   }
   //失去焦点需要把文本框里文字颜色变浅
   this.style.color='#999';
}

通过className更改元素样式

//1.使用element.style获得修改元素样式
var test=document.querySelector('div');
test.onclick=function(){
   //this.style.background='purple';
   //this.style.color='#fff';
  // this.style.fonsize='25px';
   //this.style.marginTop='100px';
   //当前元素类名改为了change
   //2.可通过修改元素className更改元素样式
    this.className='change';
   //3.如想保留原先的类名
   this.className='first change';
}

在这里插入图片描述

在这里插入图片描述

注:

  • 样式修改较多,可以采取操作类名方式更改元素样式
  • class是个保留字,因此使用className来操作元素类名属性
  • className会直接更改元素的类名,会覆盖原先的类名

案例:密码框格式提示错误信息
在这里插入图片描述
在这里插入图片描述

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

//获取元素
var ipt=document.querySelector('.ipt');
var message=document.querySelector('.message');
//注册事件 失去焦点
ipt.onblur=function(){
  //根据表单里面值得长度 ipt.value.length
  if(this.value.length<6||this.value.length>16){
    //console.log('错误');
    message.className='message wrong';
    message.innerHTML='您输入的位数不对要求6~16位';
  }else{
    message.className='message right';
    message.innerHTML='您输入的正确';
  }
}

排他思想
在这里插入图片描述

//获取所有按钮元素
var btns=document.getElementsByTagName('button');
//btns得到的是伪数组 里面每个元素 btns[]
for(var i=0;i<btns.length;i++){
   btns[i].onclick=function(){
   //1)先把所有按钮背景颜色去掉
   for(var i=0;i<btns.length;i++){
   }
   //2)再让当前元素背景颜色为pink
     this.style.backgroundColor='pink';
   }
}

百度换肤效果
在这里插入图片描述

//获取元素
var imgs=document.querySelector('.baidu').querySelectorAll('img');
//循环注册事件
for(var i=0;i<imgs.length;i++){
  imgs[i].onclick=function(){
    //this.src就是点击图片的路径
    //console.log(this.src);
    //把这个路径this.src给body
    document.body.style.backgroundImage='url('+this.src+')';
  }
}

案例:表格隔行变色
在这里插入图片描述
在这里插入图片描述

//获取元素 获取tbody里所有的行
var trs=document.querySelector('tbody').querySelectorAll('tr');
//利用循环绑定注册事件
for(var i=0;i<trs.length;i++){
//鼠标经过事件onmouseover
  trs[i].onmouseover=function(){
     this.className='bg';
  }
  //鼠标离开事件onmouseout
  trs[i].onmouseout=function(){
     this.className='';
  }
}

案例:表单全选取消全选案例

在这里插入图片描述

//全选 取消全选
var j_cbAll=document.grtElementById('j_cbAll');//全选按钮
var j_tbs=document.grtElementById('j_tb').getElementByTagName('input');//下面所有复选框

//注册事件
j_cbAll.onclick=function(){
//this.checked  ture 选中
   console.log(this.checked);
   for(var i=0;i<j_tbs.length;i++){
     j_tbs[i].checked=this.checked;
   }
}

//下面全部选中 上面全选选中
for(var i=0;i<j_tbs.length;i++){
  j_tbs[i].onclick=function(){
     var flag=true;
    //每次点击下面的复选框都要循环检查这4个小按钮是否全被选中
    for(var i=0;i<j_tbs.length;i++){
       if(!j_tbs[i].checked){
          flag=false;
          break;//退出
       }
    }
    j_cbAll.checked=flag;
  }
}

获取属性值

  • element.属性 内置属性
  • element.getAttribute(‘属性’);

设置属性值

  • element.属性=‘值’ 设置内置属性值
  • element.setAttribute(‘属性’,‘值’);(主要针对自定义属性)

移除属性

  • element.removeAttribute(‘属性’);

案例:tab栏切换
在这里插入图片描述
在这里插入图片描述

//获取元素
var tab_list=document.querySelector('.tab_list');
var lis=tab_list.querySelectorAll('li');
var items=document.querySelectorAll('.item');
//for循环绑定点击事件
for(var i=0;i<;is.length;i++){
  //5个小li设置索引号
  lis[i].setAttribute('index',i);
  lis[i].onclick=function(){
    for(var i=0;i<lis.length;i++){
      lis[i].className='';
    }
    this.className='current';
    //下面的显示内容模块
    var index=this.getAttribute('index');
    console.log(index);
    //排他思想
    for(var i=0;i<items.length;i++){
      items[i].style.display='none';
    }
    items[index].style.display='block';
  }
}

H5自定义属性
为了保存并使用数据

H5规定自定义属性data-开头作为属性名并且赋值

获取H5自定义属性

  • 兼容性获取 element.getAttribute(‘data-index’);
  • H5新增element.dataset.index或者element.dataset[‘index’] ie11才开始支持

节点操作

利用节点层级关系获取元素

  • 利用父子兄节点关系获取元素
  • 逻辑性强,但是兼容性稍差

父级节点

node.parentNode

  • 可返回某节点的父节点(最近的一个父节点)
  • 否则返回null
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值