DOMBOM

DOM

Document Object Model:文档对象模型

DOM树

在这里插入图片描述
文档:一个页面就是一个文档;
节点:网页中的所有内容,在文档树中都是节点,使用node表示;

DOM操作节点实现网页特效的步骤:

  1. 获取html标签元素
  2. 修改标签的样式、内容、属性
var div=document.querySelector('div');
div.style.backgroundColor='#000';

获取页面元素

  • getElementById、getElementsByTagName、getElementsByClassName
  • querySelector / querySelectorAll
getElementById

一次只能获取一个标签对象

<p id="p1"></p>
var pDom=document.getElementById("p1");
console.dir(pDom);
getElementsByTagName

一次获得多个标签对象

<p></p>
<p></p>
var pDoms=document.getElementsByTagName("p");
for(var i=0;i<pDoms.length;i++){//console.dir(pDoms[i]);pDoms[i].style.color="red";
}
getElementsByClassName

一次获得多个标签对象

<p class="word"></p>
<div class="word"></div>
<h1 class="word"></h1>
var colors["red","green","blue"];
var pDoms=document.getElementsByClassName
for(var i=0;i<pDoms.length;i++){//console.dir(pDoms[i]);pDoms[i].style.color=colors[i];
}
querySelector

查询选择器,css中的基本选择器,复合选择器都能用;
一次只能获取一个标签对象

<h1 id="book"></h1>
<p class="title"></p>
<span><span>
var span=document.querySelector('span');
var h=document.querySelector('#book');
var p=document.querySelector('.title');
querySelectorAll

一次获得多个标签对象

<li></li>
<li></li>
<li></li>
document.querySelectorAll('li');
//获取body标签元素
document.body;
//获取html标签元素
document.documentElement;

事件

触发–响应

事件三要素

  1. 事件源:触发事件的元素
  2. 事件类型
  3. 事件处理函数
<button>点击一下</button>
//1.获取事件源
var btn=document.querySelector('button');
//2.绑定点击事件
btn.onclick=function(){
//3.弹出警告alert("被点了");
}

绑定事件的三种方式

  1. 直接写在标签以on开头的事件中
<button onclick="alert('点一下了')"></button>
  1. 对象.on事件=function(){}

  2. 对象.addEventListener(事件名,function(){})

btn.addEventListener('click',function(){alert("点了");
}

鼠标事件

在这里插入图片描述

键盘事件

在这里插入图片描述
键盘事件通常用在单行文本框和多行文本框上

    <input type="text"><br><br><textarea></textarea>
    //单行文本框注册keyup事件,将内容输出到终端var input=document.querySelector('input');input.onkeyup=function(){//this指向事件的调用者console.log(this.value);}//单行文本框注册keydown事件,将内容输出到终端input.onkeydown=function(){console.log(this.value);}//多行文本框注册keypress事件,将内容输出到终端document.querySelector("textarea").onkeypress=function(){console.log(this.value);}
其他事件

在这里插入图片描述

 	<form><div>标题</div>账号:<input id="account" type="text" placeholder="请输入用户名" maxlength="10"/><br/>密码:<input type="password" placeholder="请输入密码"/><br/><button type="submit">提交</button>   </form><script>document.querySelector('div').ondblclick=function(){alert("请填写信息");}var account=document.querySelector('#account');account.onfocus=function(){console.log('获取了焦点');}account.onblur=function(){console.log('失去了焦点');}document.querySelector('form').onsubmit=function(){alert("表单提交了");}</script>
事件对象

事件触发时,就会产生事件对象,并以参数的形式传给事件处理函数

dom.onclick=function(event){//event就是事件对象console.dir(event);
}

文本框输入回车键时进行处理:判断当前输入的ascii码值是否为13

input.addEventListener('keyup',function(e){if(e.keyCode==13){console.log(this.value);}
}

阻止表单提交:

form.onsubmit=function(event){//方法1:event.preventDefault();//方法2:return false;
}

阻止a标签跳转:

方法一:href设置为javascript:;
方法二:οnclick=“return false”

样式操作

两种方式:style属性和className属性

style

style用来设置单个属性
格式:对象.style.样式
样式就是CSS中的样式,如果样式使用横线连接,则去掉横线改为首字母大写

var p=document.querySelector('p');
p.style.textAlign='center';

用style获取已有的样式:
对象.style.样式

p.style.color;

className

className通过修改标签的class值来修改属性的样式
对象.className

var p=document.querySelector('p');
p.className='title';

获取当前的className:
对象.className

标签内容的获取和修改

innerHTML 和 innerText,innerText不会识别html标签,而innerHTML会识别

<div class='d'></div>
var d=document.querySelector('.d');
d.innerHTML("hahah");

表单

value和type属性

 	<form action="#" method="get">账号:<input type="text" name="account" value="admin" placeholder="请输入用户名" maxlength="10"disabled/><br/>密码:<input type="password" name="password" value="123" placeholder="请输入密码" readonly disabled/><br/>性别:<input type="radio" name="gender" value="female"><input type="radio" name="gender" value="male"><br/>爱好:<input type="checkbox" name="hobby[]" value="eat"><input type="checkbox" name="hobby[]" value="drink" checked><input type="checkbox" name="hobby[]" value="play"><br/><input type="file" multiple><br/>地址<select name="addr"><option value="bj">北京</option><option value="sh">上海</option><option value="sz">深圳</option></select><textarea name="sign"></textarea><input type="submit" value="提交按钮"/></form><script>var form=document.querySelector('form');//使用属性选择器获取标签对象var username=document.querySelector('[type="text"]');var password=document.querySelector('[type="password"]');var gender=document.querySelectorAll('[name="gender"]');var addr=document.querySelector('[name="addr"]');var sign=document.querySelector('[name="sign"]');form.onsubmit=function(){for(var i=0;i<gender.length;i++){if(gender[i].checked){console.log(gender[i].value);}}console.log(addr.value);console.log(sign.value);return false;}</script>

修改type属性的值能够修改表单域的状态

 <div class="box"><div class="lock"><span class="iconfont icon-suo"></span></div><div class="inp"><input id="pwd" type="password" placeholder="密码"></div><div class="eye"><span class="iconfont icon-yanjing"></span></div></div><script>var eye=document.querySelector('.eye');var pwd=document.querySelector('#pwd');var eyeI=document.querySelector('.eye span')eye.onclick=function(){if(pwd.type=='password'){pwd.type='text';eyeI.class='icon-yanjing1';}else{pwd.type='password';eyeI.class='icon-yanjing';}}</script>

复选框

<table aling="center" width="500" border="1" cellspacing="0"><caption><h3>用户列表</h3></caption><thead><tr><th width="40"><input type="checkbox"></th><th>id</th><th>姓名</th><th>昵称</th><th>性别</th><th width="80">操作</th></tr></thead><tbody><tr><td><input type="checkbox"></td><td>1</td><td>lux</td><td>光辉女神</td><td></td><td><a href="javascript:;">编辑</a></td></tr><tr><td><input type="checkbox"></td><td>1</td><td>lux</td><td>光辉女神</td><td></td><td><a href="javascript:;">编辑</a></td></tr><tr><td><input type="checkbox"></td><td>1</td><td>lux</td><td>光辉女神</td><td></td><td><a href="javascript:;">编辑</a></td></tr><tr><td><input type="checkbox"></td><td>1</td><td>lux</td><td>光辉女神</td><td></td><td><a href="javascript:;">编辑</a></td></tr></tbody></table><script>//全选复选框注册点击事件//获取全选复选框的checked状态//循环表体复选框,将每个表体复选框的状态同步成全选复选框//表头中的全选复选框影响表体中的复选框//1.获取全选复选框并注册点击事件var allChecked=document.querySelector('thead input');var checks=document.querySelectorAll('tbody input');allChecked.onclick=function(){//2.获取当前复选框的状态var status=this.checked;//console.log(status);//3.同步给表体中的所有复选框for(var i=0;i<checks.length;i++){checks[i].checked=status;}}//表体中的全选复选框影响表头中的复选框//循环为每个表体复选框注册点击事件//点击事件中,判断表体每个复选框的状态//所有复选框的checked没有false时,全选框选中;否则不选中//循环为每一个表体复选框绑定点击事件for(var i=0;i<checks.length;i++){checks[i].onclick=function(){//循环表体中的复选框,判断checked状态for(var j=0;j<checks.length;j++){if(checks[j].checked==false){allChecked.checked=false;break;}else{allChecked.checked=true;}}}}</script>
</body>
</html>

自定义属性

html5中可通过data-*来设置自定义属性,存储数据;
保存的数据以对象形式保存在dataset属性中

<div data-name="zs" data-age="8"></div>

dataset:DOMStringMap
   age:“8”
   name:“zs”

for(var k in div.dataset){cconsole.log(k,div.dataset[k]);
}

属性操作方法:

  • 设置属性:dom.setAttribute(‘属性名’,‘值’)
  • 获取属性值:dom.getAttribute(‘属性名’)
  • 移除属性:dom.removeAtrribute(‘属性名’)
//属性前面的名称data前缀不能省略
div.setAttribute('data-id',1);

除了可以操作自定义属性外,还可以操作原有属性

新增/删除节点

新增节点

创建新节点,并将新节点添加到html文档中

创建标签: document.createElement(“元素名”);

添加节点到文档的方法:
方法一:dom.insertBefore(d1,d2),在d2前添加d1

<div id="main"><div id="f"></div><div id="s"></div><div id="t"></div>
</div>
//创建一个新的div标签对象
var divDom=document.createElement('div');
//将新增div添加到第一个div前
var main=document.querySelector('#main');
main.insertBefore(divDom,f);

方法二:d1.appendChild(d2),将d2添加到d1中

//将新增div追加到main中
main.appendChild(divDom);

特点:添加不会覆盖原有内容
缺点:复杂结构的标签不容易添加

字符串节点
insertAdjacentHTML(“添加位置”,标签字符串);
位置值有四个:beforebegin、afterbegin、beforeend、afterend

var str='<li><br>第一章</b><a href="#"></a></li>';
document.querySelector('ul').insertAdjacentHTML('beforeend',str);

删除节点

d1.removeChild(d2),从d1中删除子节点d2

<ul><li>苹果</li><li id="sec">香蕉</li><li>西瓜</li>
</ul>
var ul=document.querySelector("ul");
var li=document.querySelector("#sec");
ul.removeChild(li);

删除例子:

	var arr=[{id:1,name:"李白",gender:"男",age:100},{id:2,name:"李白",gender:"男",age:100},{id:3,name:"李白",gender:"男",age:100},{id:4,name:"李白",gender:"男",age:100},{id:5,name:"李白",gender:"男",age:100}];var str='';for(var i=0;i<arr.length;i++){str+="<tr><td>"+arr[i].id+"</td><td>"+arr[i].name+"</td><td>"+arr[i].gender+"</td><td>"+arr[i].age+"</td><td><button class='del'>删除</button></td></tr>"}var tbody=document.querySelector('tbody');tbody.innerHTML=str;//给所有删除按钮绑定点击事件var btns=document.querySelectorAll('button');for(var i=0;i<btns.length;i++){btns[i].onclick=function(){//找到当前删除按钮对应的tr标签var tr=this.parentNode.parentNode;tbody.removeChild(tr);}}

其他节点属性

  • parentNode:父节点

  • children:子节点(伪数组)

  • nextElementSibling:下一个兄弟元素节点(IE9)

  • previouElementSibling:上一个兄弟元素节点(IE9)

  • nodeName:节点名称

  • nodeType:节点类型(1.元素节点、2.属性节点、3.文本节点)

  • nodeValue:节点值

Tab栏切换

排他思想,删除其他元素清除样式,给当前元素设置样式

在这里插入图片描述

<style>*{margin:0;padding:0;}.box{width: 600px;height:500px;margin:0 auto;}li{width: 80px;height: 20px;border: 1px solid #eee;}li.active{border:3px solid orange;background-color: #fff;color:orange;}.content>div{display:none;width:100%;height:300px;line-height:300px;font-size:30px;text-align:center;}.content .current{display:block;}</style>
</head>
<body><div class="box"><ul class="clearfix"><li class="active">足球</li><li>篮球</li><li>乒乓球</li></ul><div class="content"><div class="current">足球消息列表</div><div >篮球消息列表</div><div>乒乓球消息列表</div></div></div><script>//获取所有li标签//li上循环绑定鼠标进入事件//清除所有li标签上的active类,为当前li设置active类//获取所有的div//找到选中的li的索引//根据索引找到对应的div//清除所有div上的current类,为当前div绑定current类var lis=document.querySelectorAll('li');var divs=document.querySelectorAll('.content>div');lis.forEach(function(item,index){item.onmouseenter=function(){//循环清除所有的li的class值lis.forEach(function(val,i){val.className='';})this.className='active';divs.forEach(function(val,i){val.className='';})divs[index].className='current';}})</script>
</body>

BOM

浏览器对象模型,提供了一系列和浏览器交互的对象、属性、方法

window对象

window对象是BOM的核心对象,也是顶级对象
在这里插入图片描述
window调用子对象时可以省略自己:
console.log() == window.console.log()

全局作用域下声明的变量和函数都自动挂载到window对象上:
var username=‘xx’ 等价 window.username=‘xx’

声明全局变量时一般不使用name,因为window对象中有name属性

window对象常用方法

BOM没有通用标准,每个浏览器上显示效果不一样

alert()
confirm(),返回值true/false
prompt(),点击确定按钮,返回值为输入的内容

页面加载事件

window.onload: 页面加载事件,在页面加载完成后触发
document.DOMContentLoaded: 页面DOM加载完成后触发,不包括样式表、flash、图片等
优势:如果页面需要加载大量的图片或视频文件,不需要等待大文件加载完成就会触发,一定程度上提高了页面访问速度

window.onresize事件
窗口大小调整事件,当窗口大小发生改变时触发

window.onresize=function(){console.log(window.innerWidth,window.innerHeight);
}
    <div class="box"><div class="left"></div><div class="tmp"></div><div class="right"></div></div>
		//在onresize事件中不断监听innerWidth的值//当innerWidth小于某个值时隐藏tmp//当innerWidth大于某个值时显示tmpvar tmp=document.querySelector('.tmp');var box=document.querySelector('.box');window.onresize=function(){if(window.innerWidth<900){tmp.style.display='none';box.style.window='640px';}else{tmp.style.display='block';box.style.window='800px';}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/85182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件需求文档、设计文档、开发文档、运维文档大全

在软件开发过程中&#xff0c;文档扮演着至关重要的角色。它不仅记录了项目的需求、设计和开发过程&#xff0c;还为项目的维护和管理提供了便利。本文将详细介绍软件开发文档的重要性和作用&#xff0c;以及需求分析、软件设计、开发过程、运维管理和项目管理等方面的文档要求…

DA5 网站用户没有补全的信息

目录 1.题目描述 2.输入描述 3.输出描述 4.题目分析 5.通过代码 1.题目描述 现有一个Nowcoder.csv文件&#xff0c;它记录了牛客网的部分用户数据&#xff0c;包含如下字段&#xff08;字段与字段之间以逗号间隔&#xff09;&#xff1a; Nowcoder_ID&#xff1a;用户ID …

Vosviewer的安装与使用

Vosviewer的安装与使用 1 安装2 使用参考&#xff1a; 关于vosviewer我就不过多介绍了。 vosviewer与citespace有什么区别?在这里可以引用一下知乎的文章简要说明一下&#xff1a; 1.操作难易VOSviewer很简单&#xff0c;在官网下载的时候会附带一个英文手册&#xff0c;稍微…

Linux命令基础

一、linux目录结构。 Linux没有windows的盘的概念&#xff0c;是一个树形的结构。唯一的根目录为/&#xff0c;所有的文件都在他下面。 描述方式也与windows有所不同 二、命令基础格式。 command [-options] [parameter]&#xff08;[ ]表示可选的&#xff09; command:必…

以太坊代币标准ERC20、ERC721

两个概念 ERC(Ethereum Request for Comment) 以太坊意见征集稿EIP(Ethereum Improvement Proposals)以太坊改进提案 ERC和EIP用于使得以太坊更加完善&#xff1b;在ERC中提出了很多标准&#xff0c;用的最多的标准就是它的Token标准; 有哪些标准详细见https://eips.ethereum…

【lesson7】yum的介绍及使用

文章目录 预备工作yum的基本过程yum的操作**yum源问题&#xff1a;****yum三板斧&#xff1a;**yum listyum searchyum list | grepyum installyum install -yyum removeyum remove -y 预备工作 首先有三个问题&#xff1a; 问题解答&#xff1a; 这里我们联想到了手机 问题…

论文阅读:AugGAN: Cross Domain Adaptation with GAN-based Data Augmentation

Abstract 基于GAN的图像转换方法存在两个缺陷&#xff1a;保留图像目标和保持图像转换前后的一致性&#xff0c;这导致不能用它生成大量不同域的训练数据。论文提出了一种结构感知(Structure-aware)的图像转换网络(image-to-image translation network)。 Proposed Framework…

5.5V-65V Vin同步降压控制器,具有线路前馈SCT82630DHKR

描述&#xff1a; SCT82630是一款65V电压模式控制同步降压控制器&#xff0c;具有线路前馈。40ns受控高压侧MOSFET的最小导通时间支持高转换比&#xff0c;实现从48V输入到低压轨的直接降压转换&#xff0c;降低了系统复杂性和解决方案成本。如果需要&#xff0c;在低至6V的输…

Java“牵手”义乌购商品详情数据,义乌购商品详情接口,义乌购API接口申请指南

义乌购隶属浙江义乌购电子商务有限公司旗下网站。该平台定位为依托实体市场&#xff0c;服务实体市场&#xff0c;以诚信为根本&#xff0c;将7万网上商铺与实体商铺一一对应绑定&#xff0c;为采购商和经营户提供可控、可信、可溯源的交易保障。 义乌购平台现有商铺商品、市场…

OpenHarmony Meetup常州站招募令

OpenHarmony Meetup 常州站正火热招募中&#xff01; 诚邀充满激情的开发者参与线下盛会~ 探索OpenHarmony前沿科技&#xff0c;畅谈未来前景&#xff0c; 感受OpenHarmony生态构建之路的魅力&#xff01; 线下参与&#xff0c;名额有限&#xff0c;仅限20位幸运者&#xff01…

计算机网络常见问题

1.谈一谈对OSI七层模型和TCP/IP四层模型的理解&#xff1f; 1.1.为什么要分层&#xff1f; 在计算机中网络是个复杂的系统&#xff0c;不同的网络与网络之间由于协议&#xff0c;设备&#xff0c;软件等各种原因在协调和通讯时容易产生各种各样的问题。例如&#xff1a;各物流…

【MySQL】 MySQL的增删改查(进阶)--贰

文章目录 &#x1f6eb;新增&#x1f6ec;查询&#x1f334;聚合查询&#x1f6a9;聚合函数&#x1f388;GROUP BY子句&#x1f4cc;HAVING &#x1f38b;联合查询⚾内连接⚽外连接&#x1f9ed;自连接&#x1f3c0;子查询&#x1f3a1;合并查询 &#x1f3a8;MySQL的增删改查(…

web前端之float布局与flex布局

float布局 <style>.nav {overflow: hidden;background-color: #6adfd0; /* 导航栏背景颜色 */}.nav a {float: left;display: block;text-align: center;padding: 14px 16px;text-decoration: none;color: #000000; /* 导航栏文字颜色 */}.nav a:hover {background-col…

测试基础知识

测试的基础知识 软件&#xff1a;控制硬件工作的工具。 软件测试&#xff1a;使用技术手段验证软件是否满足使用需求。 软件测试目的&#xff1a;减少软件缺陷&#xff0c;保证软件质量。 测试主流技能&#xff1a;功能测试、自动化测试、接口测试、性能测试 功能测试&#xff…

三相组合式过电压保护器试验

三相组合式过电压保护器试验 试验目的 三相组合式过电压保护器主要分为有带串联间隙过压保护器和无间隙过压保护器两大类&#xff0c;其试验项目内容要求分别使用高压工频交流和高压直流电源。 三相组合式过电压保护器试验&#xff0c;主要是为了及早发现设备内部绝缘受潮及…

解锁学习新方式——助您迈向成功之路

近年来&#xff0c;随着吉林开放大学广播电视大学的崛起&#xff0c;越来越多的学子选择这所优秀的学府来实现自己的梦想。而作为一名学者&#xff0c;我有幸见证了电大搜题微信公众号的诞生&#xff0c;为广大学子提供了一个全新的学习支持平台。 电大搜题微信公众号&#xff…

《深度学习工业缺陷检测》专栏介绍 CSDN独家改进实战

&#x1f4a1;&#x1f4a1;&#x1f4a1;深度学习工业缺陷检测 1&#xff09;提供工业小缺陷检测性能提升方案&#xff0c;满足部署条件&#xff1b; 2&#xff09;针对缺陷样品少等难点&#xff0c;引入无监督检测&#xff1b; 3&#xff09;深度学习 C、C#部署方案&#…

2023工博会强势回归!智微工业携八大系列重磅亮相

中国国际工业博览会&#xff08;简称"中国工博会"&#xff09;自1999年创办以来&#xff0c;历经二十余年发展创新&#xff0c;通过专业化、市场化、国际化、品牌化运作&#xff0c;已发展成为通过国际展览业协会&#xff08;UFI&#xff09;认证、中国工业领域规模最…

示例-安装office2016图文教程简体中文下载安装包

目录 简介 步骤 总结 简介 Office 2016作为一款办公软件套件&#xff0c;下载和安装 都具有许多令人印象深刻的特点。让我来为你介绍一下&#xff1a;Office 2016注重实现跨平台的一致性。无论你是在Windows、Mac、iOS还是Android上使用Office&#xff0c;你都可以享受到相似…

数据集成:数据挖掘的准备工作之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…