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:必…

SMB:使用 Ansible 自动化配置 samba 客户端服务端

写在前面 考试顺便整理博文内容整理 使用 Ansible 部署 samba 客户端和服务端理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c…

百度之星(数学基础题)

糖果促销 小度最喜欢吃糖啦&#xff01;&#xff01;&#xff01; 这天商店糖果促销&#xff0c;可给小度高兴坏了。 促销规则&#xff1a;一颗糖果有一张糖纸&#xff0c;p 张糖纸可以换取一颗糖果。换出来糖果的包装纸当然也能再换糖果。 小度想吃 k 颗糖果&#xff0c;他…

以太坊代币标准ERC20、ERC721

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

三行代码实现图像画质修复,图片清晰度修复,清晰度提升python

核心代码 # 原始文件 enhancer ImageEnhance.Sharpness(Image.open(文件路径.png)) # 增强图片 img_enhanced enhancer.enhance(增强系数float) # 输出目标文件 img_enhanced.save(文件名.png)注意&#xff0c;输入输出文件格式必须一致 所需依赖 # 文件选择框&#xff0c…

【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…

Golang 字符串

目录 1. Golang 字符串1.1. 基础概念1.2. 字符串编码1.3. 遍历字符串1.4. 类型转换1.5. 总结1.6. String Concatenation (字符串连接)1.6.1. Using the operator1.6.2. Using the operator1.6.3. Using the Join method1.6.4. Using Sprintf method1.6.5. Using Go string Bu…

K-means 聚类算法学习笔记

K-means 聚类算法 是一种无监督学习算法&#xff0c;用来将 n n n 个样本点分成 k k k 类&#xff0c;使得整个数据集的误差平方和 S S E SSE SSE 最小。在本例中&#xff0c;样本点是指平面直角坐标系上的点&#xff0c;聚类中心也是平面直角坐标系上的点&#xff0c;而每个…

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

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

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

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

网络连接中的三次握手和四次挥手

三次握手和四次挥手都是TCP协议通信过程中建立和关闭连接的步骤。 三次握手的步骤如下&#xff1a; 客户端发送SYN包&#xff0c;进入SYN-SENT状态。服务器接收到SYN包&#xff0c;回复一个ACK包和一个SYN包&#xff0c;进入SYN-RECEIVED状态。客户端收到ACK包和SYN包&#x…

Fair原理篇Fair逻辑动态化架构设计与实现

本文的核心内容包括: 数据逻辑处理布局中的逻辑处理Flutter类型数据处理一、数据逻辑处理 我们接触的每一个Flutter界面,大多由布局和逻辑相关的代码组成。如Flutter初始工程的Counting Demo的代码: class _MyHomePageState extends State<MyHomePage> {// 变量 int…

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…