JavaScript-DOM-02

自定义属性:

​
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.card{width: 100px;height: 100px;background-color: aqua;border: 1px solid black;}</style>
</head>
<body><!-- 固有属性  id class style src href  --><!-- 自定义属性 有时候我们希望自己存一些自己定义的属性 作用:存值 --><!--我们希望就是目前是有一列商品 但是我希望点击的时候 能够跳转到新的页面 肉眼可见没什么用,而是我们要想办法就是让程序也可以清晰可见 --><!-- 我们先自定义一个属性名为Product-id  然后我点击的时候我希望拿到这个属性--><div class="card" product-id="1">商品</div><div class="card">商品</div><div class="card">商品</div><div class="card">商品</div><div class="card">商品</div></body>
<script>//我们先去拿到所有的商品 var getProducts=document.querySelectorAll('.card')console.log(getProducts);getProducts.forEach(function (ele,index) {// 拿到每一个div对象console.log(ele);console.log(ele.className);// 重点:这里我们取自定义属性名的方法console.log(ele.getAttribute('product-id'));// 所以这里我们判断 记住 null就是为false在前端是这样的 我们用可以这种方法去存if(!ele.getAttribute('product-id')){// 大写驼峰不识别ele.setAttribute('product-id',index)}})</script>
</html>​

事件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><!-- 1.通过标签属性绑定点击事件  div onclick="函数调用"></div> 满足了三个条件 事件源:div 事件类型:onclick或者是一个鼠标键盘的行为  事件源程序:放到onclick里面的--><div onclick="testOne(this)">这是一行字</div><button class="btn">第二绑定方式</button><!--  --><span>xxxx</span><button class="demo-btn">这是第二个按钮</button><!-- 表单输入标签 --><input type="text" class="box"></body>
<script>// 事件重点中的重点 事件字面上来说就是可以被js检测到的行为,点击,拖拽,键盘,鼠标,对我这个网页的交互行为// 我们针对用户的行为去做代码上的指定事情// 表单标签就有输入事件// 事件的三大部分// 事件源:比如我点击一个按钮 这个按钮就是事件源// 事件类型:事件的触发方式:单击,双击 长按// 事件程序:对于这个事件源我要做什么事情,比如我点击一个按钮 右侧要打开一个列表 那么打开的这个过程就是我们要写的// 记住只要是事件 都包含两个参数 一个是事件参数event自带(保存一些事件相关信息) 一个是事件源的指向(this 本质就是自身的DOM对象)// 开发者工具切换设备仿真 鼠标点击 和手机触摸// 绑定的三种方式// 声明一个函数 源程序的function testOne(_this) {console.log('你触发了我,我真的谢谢你!!!');// 现在这个this指向整个html对象上去了  通过标签属性绑定的是没有this的 除非在()里面声明 需要手动传入console.log(_this.innerText);}// 2.通过DOM对象.事件的绑定var btn=document.querySelector('.btn')// 直接写事件 btn.onclick=function testTwo() {console.log("Two Two Two");}// 利用DOM对象.addEventListener 传两个参数 一个是绑定参数的类型 一个是源程序   那么第一个参数中如果是前缀有on的都可以不用写document.querySelector('span').addEventListener('click',function testThree() {console.log("this is the third Method");console.log(event);console.log(this.innerText);})
</script>
<script>//   鼠标悬浮事件 鼠标移进去就修改颜色样式var demoBtn=document.querySelector('.demo-btn')demoBtn.onmouseover=function(){console.log('dnksmxksmxksmsd');//但是移出去还没有设置变回来demoBtn.style.backgroundColor='red'}demoBtn.onmouseout=function(){demoBtn.style.backgroundColor='green'   }// 键盘事件一般是用在表单输入标签上面 以及我们可以设置如果输入非法字符就怎么样的一个思路 以及视频的快进(去判断按的按钮是否是左键右键 如果是前进几秒倒退几秒)var boxDom=document.querySelector('input')boxDom.onkeydown=function(){console.log(this);console.log(event);var test=''if(isNaN(event.key)){this.value=test}}// 文档对象也能添加事件 表示说当我进入整个网站页面 我点击哪个触发哪些事件</script>
</html>

冒泡事件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div class="father">父亲<button class="child">孩子</button></div></body><script>// 冒泡事件触发的前提条件:// 嵌套层级上有相同的触发事件类型var father =document.querySelector('.father')var child=document.querySelector('.child')father.onclick=function(){console.log('点击了父亲');event.stopPropagation()}// 当我点击孩子的时候 父亲这时候也触发了两个都触发了 这个就是冒泡排序 一层一层往上触发 先自己 然后哪一层有 就往上触发child.onclick=function(){console.log('点击了孩子');// 所以我们必须禁止冒泡 因为假如一个界面一个商品的界面有几个立即购买,查看商品详情 那么我不可能点一下同时触发两次。只停止自己的//  所以这种嵌套我们必须每一个function里面都写event.stopPropagation()}</script>
</html>

默认事件:(了解 框架帮我们做好了)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><form action="https://cn.bing.com/?form=000047&ocid=msedgntp&pc=CNNDDB&cvid=682bcc6ea3704a9688bbb3a3b06ac7b3&ei=10"><input type="text"><!-- 只要这边有按钮就会有提交效果,跳转网页到action的网址路径中去 --><!--  如果我要输入值校验 来不及校验就走掉 我们要在标签提交前 去做校验 --><button>提交</button></form></body>
<script>// 该方法阻止默认事件 比较少用 但是冒泡事件用得会比较多document.querySelector('form button').onclick=function(){// 这样子我就可以安安心心地拿到所有值去判断event.preventDefault()}</script>
</html>

节点操作:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.father{width: 100px;height: 100px;border: 1px solid black;}.title{width: 100px;height: 100px;background-color: aqua;}</style>
</head>
<body><!-- 一个标签(不是在js)一般都是元素节点 一个是文本节点 --><!-- innnerHTML两个都能够修改  --><!-- innerText只能够修改文本内容  --><div class="father"><div class="child">孩子 <span>x</span> <span>xxx</span></div><div class="brother">兄弟</div></div><div class="news-model"></div><!-- 创建一个按钮 与节点删除做测试 --><button onclick="del()">delll</button>
</body>
<script>// 现在就是要通过child去找它的兄弟 需要通过节点操作 因为如果有七八个的话没必要
// 节点操作后面也是很少用 但是这个克隆节点 比如说弹幕点击可以弹一个窗口回复(原来的位置保持不变)   或者说鼠标到弹幕停止滚动var chid=document.querySelector('.father .child')// 通过孩子可以找到父节点console.log(chid.parentElement);// 获取孩子的子节点 目前只有文本节点 我再加一个span 比较少去取文本console.log(chid.childNodes);// 一般用这种方法去取 子元素节点console.log(chid.children);// -----------------------------// 现在去拿到父亲节点var  father=document.querySelector('.father')// 拿到的是childconsole.log(father.firstElementChild);// 获取下一个相邻的兄弟console.log(chid.nextElementSibling);// child 找到里面的第一个span 然后可以一直往下找// console.log(chid.firstElementChild.nextElementSibling.nextElementSibling);// 优化 我们可以用这种方法直接找到最后一个span 基于已有childDOM对象再去找它内部的东西var  spanDOM=chid.querySelector('span:last-child')console.log(spanDOM);// 我们真正项目很少去写DOM// 就是说我们要把这些数据打到页面上去 之前的思路就是在body创建三个标签 然后分别设置样式 现在就是我们要根据这个数据去创建这样的标签// 1.先创建节点 括号表示要什么样的标签// 2.现在在代码上我们得想办法加到页面上去  现在上面创建一个存放新闻的面板var newDOMS=document.createElement('div')var data=["今天下雨","XXX","sjdjnsjd"]console.log(newDOMS);// 补充:我们一般是在加入之前 把标签的内容等构建好再加newDOMS.innerText='12235'newDOMS.classList.add('title')// 3.找到要添加的目标var targetNewModel=document.querySelector('.news-model')// 在内部往后加 一般是往后 括号填入创建好的 最初都是创建好的定死的,数据不可控 没办法根据数据的内容和数量去创建targetNewModel.appendChild(newDOMS)// 动态添加创建节点data.forEach(function (ele) {var newDOMS=document.createElement('div')newDOMS.innerText=ele// 在这边我们也可以去添加事件newDOMS.onclick=function(){console.log('别再点我了 谢谢');}newDOMS.classList.add('title')targetNewModel.appendChild(newDOMS)// 所以只要我有数据我就可以根据数据的量和数据的内容去创建,动态的把页面构建出来 现在的网站都这样 数据不是定死 刷新一下可能就变了 都是利用DOM去操作的})// 节点删除var btn11=document.createElement('button')btn11.innerText='mashang'// 加在body的最后面 只是测试document.querySelector('body').appendChild(btn11)function del(){console.log(btn11);// 调用该函数 删除 代码层面上还在 页面上已经不存在了 btn11.remove()}// 节点克隆// 我现在想要把整个father节点给它克隆出来  没有true的话克隆的只有当前father的元素   true的话就是father里面的元素也能够被克隆//   与被克隆毫无相关var getDivFatherByClone=document.querySelector('.father').cloneNode()console.log(getDivFatherByClone);</script>
</html>

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

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

相关文章

Kind方式部署k8s单节点集群并创建nginx服务对外访问

资源要求 请准备好doker环境&#xff0c;尽量用比较新的版本。我的docker环境如下 docker 环境&#xff1a; Docker version 20.10.21, build 20.10.21-0ubuntu1~18.04.3 安装kind kind表现上就是一个二进制程序&#xff0c;下载对应版本并增加执行权限即可&#xff1a; cu…

MySQL备份恢复:数据安全的终极指南

引言 各位数据库爱好者们好&#xff01;今天我们要深入探讨MySQL数据库的"生命保险"——备份与恢复策略 &#x1f6e1;️。在数据即资产的时代&#xff0c;任何数据丢失都可能造成灾难性后果。本教程将带你全面掌握从逻辑备份到物理备份&#xff0c;从二进制日志恢复…

id分页遍历数据漏行问题

令入参id为0 while(true){ select * from table where id>#{id} order by id asc limit 100; 取结果集中最大id作为下次查询的入参 其他操作 } 这个算法一般没问题&#xff0c;但在主从数据系统中&#xff0c;主库写&#xff0c;查询从库遍历数据时&#xff0c;出现了…

OpenCV级联分类器

概念 OpenCV 级联分类器是一种基于 Haar 特征、AdaBoost 算法和级联结构的目标检测方法&#xff0c;通过多阶段筛选快速排除非目标区域&#xff0c;实现高效实时检测&#xff08;如人脸、行人等&#xff09;。 加载级联分类器 // 加载级联分类器CascadeClassifier cascade;// …

C++ inline 内联函数

一、定义与设计初衷 inline 函数是 C 中通过 减少函数调用开销 优化程序效率的机制。其核心设计初衷是 取代 C 语言中宏定义&#xff08;#define&#xff09;&#xff0c;同时解决宏的以下缺陷&#xff1a; 类型安全问题&#xff1a;宏仅进行文本替换&#xff0c;无法进行参数…

uniapp-商城-64-后台 商品列表(商品修改---页面跳转,深浅copy应用,递归调用等)

完成了商品的添加和展示&#xff0c;下面的文字将继续进行商品页面的处理&#xff0c;主要为商品信息的修改的页面以及后天逻辑的处理。 本文主要介绍了商品信息修改页面的实现过程。首先&#xff0c;页面布局包括编辑和删除功能&#xff0c;未来还可添加上架和下架按钮。通过c…

digitalworld.local: VENGEANCE靶场

1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.3 3&#xff0c;对靶机进行端口服务探测 nmap -sV -T4 -p- -A 192.168.23.3 端口号 协…

微店平台店铺商品接口开发指南

微店API获取店铺所有商品实现方案 以下是使用微店开放平台API获取店铺所有商品的完整实现代码&#xff0c;包含请求封装、分页处理和错误处理机制。 点击获取key和secret from weidian_api import WeidianAPI # 配置你的微店应用凭证 APP_KEY "your_app_key" APP_…

Proxmox 主机与虚拟机全部断网问题排查与解决记录

Proxmox 主机与虚拟机全部断网问题排查与解决记录 关键词&#xff1a;Proxmox、e1000e、板载网卡、断网、网络桥接、Hardware Unit Hang、网卡挂死 背景 近期在使用 Proxmox VE 管理服务器时&#xff0c;遇到一个奇怪的问题&#xff1a;每当在某个虚拟机中执行某些操作&#x…

SpringBoot整合MQTT实战:基于EMQX构建高可靠物联网通信,从零到一实现设备云端双向对话

一、引言 随着物联网(IoT)技术的快速发展&#xff0c;MQTT(Message Queuing Telemetry Transport)协议因其轻量级、低功耗和高效的特点&#xff0c;已成为物联网设备通信的事实标准。本文将详细介绍如何使用SpringBoot框架整合MQTT协议&#xff0c;基于开源MQTT代理EMQX实现设…

zData X zStorage 为什么采用全闪存架构而非混闪架构?

点击蓝字 关注我们 最近有用户问到 zData X 的存储底座 zStorage 分布式存储为什么采用的是全闪存架构而非混闪架构&#xff1f;主要原因还是在于全闪存架构在性能和可靠性方面具有更显著的优势。zData X 的上一代产品 zData 的早期版本也使用了SSD盘作为缓存的技术架构&#x…

Fiddler抓包教程->HTTP和HTTPS基础知识

1.简介 有的伙伴可能会好奇&#xff0c;不是讲解和分享抓包工具,怎么这里开始讲解HTTP和HTTPS协议了。这是因为你对HTTP协议越了解&#xff0c;你就能越掌握Fiddler的使用方法&#xff0c;反过来你越使用Fiddler&#xff0c;就越能帮助你了解HTTP协议。 Fiddler无论对开发人员…

虚拟机NAT模式获取不到ip

虚拟机NAT模式获取不到ip 如图所示 解决方案&#xff1a; 先查看NetworkManager是否启动 systemctl status NetworkManager如果没启动就启动一遍 使用DHCP手动获取一遍ip sudo dhclient ens33成功得到ip 这是后遇到了另一个问题&#xff0c;ip释放后&#xff0c;不能自动…

Sass 基础用法速览

Sass 基础用法速览 目录 Sass 基础用法速览1. 什么是 Sass&#xff1f;2. 安装 Sass2.1 使用 npm 安装&#xff08;推荐&#xff09;2.2 使用 Dart Sass&#xff08;官方推荐&#xff09;2.3 使用 GUI 工具 3. Sass 基本用法3.1 编译 Sass 4. Sass 语法详解4.1 变量4.2 嵌套4.3…

洛谷B3840 [GESP202306 二级] 找素数

题目描述 小明刚刚学习了素数的概念&#xff1a;如果一个大于 1 的正整数&#xff0c;除了 1 和它自身外&#xff0c;不能被其他正整数整除&#xff0c;则这个正整数是素数。现在&#xff0c;小明想找到两个正整数 A 和 B 之间&#xff08;包括 A 和 B&#xff09;有多少个素数…

idea部署本地仓库和连接放送远程仓库

1.下载git&#xff0c;安装好后任意地方又键会出现两个带git的东西 2.点击bash here的那个&#xff0c;召唤出git的小黑窗&#xff0c;输入 git config --global user.name "你自己取名" git config --global user.email "你自己输入你的邮箱" 3.打开id…

C++(20): 文件输入输出库 —— <fstream>

目录 一、 的核心功能 二、核心类及功能 三、核心操作示例 1. 文本文件写入&#xff08;ofstream&#xff09; 2. 文本文件读取&#xff08;ifstream&#xff09; 3. 二进制文件操作&#xff08;fstream&#xff09; 四、文件打开模式 五、文件指针操作 六、错误处理技巧…

elementUI 循环出来的表单,怎么做表单校验?

数据结构如下&#xff1a; diversionParamList: [ { length: null, positionNumber: null, value: null, } ] 思路&#xff1a;可根据 index 动态绑定 :props 属性值&#xff0c;校验规则写在:rules <div class"config-item" v-for"(item, index) in form.…

x-cmd install | Pillager:Go 语言打造的敏感信息文件系统扫描利器

目录 Pillager 的独特优势安装Pillager 的应用场景Pillager 的核心功能 还在为文件系统中潜在的敏感信息泄露而担忧吗&#xff1f;Pillager 是一款由 Go 语言编写的强大工具&#xff0c;旨在帮助你轻松扫描文件系统&#xff0c;发现隐藏的密钥、密码、API 令牌等敏感信息。 Pil…

大模型(2)——提示工程(Prompt Engineering)

文章目录 一、提示工程的核心概念为什么需要提示工程&#xff1f; 二、提示设计的基本原则三、实用提示工程技巧1. 角色设定法2. 示例引导法&#xff08;Few-Shot Learning&#xff09;3. 分阶段提问4. 负面约束5. 温度&#xff08;Temperature&#xff09;控制 四、不同任务类…