js高级方法(循环绑定变量变质、绑定与取消事件、冒泡现象)
时间:2019-06-17
本文章向大家介绍js高级方法(循环绑定变量变质、绑定与取消事件、冒泡现象),主要包括js高级方法(循环绑定变量变质、绑定与取消事件、冒泡现象)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、对象添加、删除使用属性
<div class="ele"></div>
<script>
var ele=document.querySelector(".ele")
console.log(ele.info)
==>undefined //ele对象没有添加该属性
console.log(ele.log.name);
==>报错
//添加属性
ele.info="hello";
console.log(ele.info);
==>hello
//删除属性
del ele.info;
console.log(ele.log)
==>undefined //删除后属性又会消失
</script>
二、js操作标签中的全局属性
<style>
//css全局属性选择器
['alter':"ok"]{
backgroud:black;
}
</style>
<div class="ele" alter="ok"></div>//alter就是标签的全局属性
<script>
var ele=document.querySelector('[alter]');//通过全局属性获取标签对象
//获取全局属性值
var info=ele.getAttribute('alter');
console.log(info)
==>ok
//修改全局属性值
ele.setAttribute('alter','no ok');
var info1=ele.getAttribute('alter');
console.log(info1)
===>no ok
//给标签添加全局属性值,结合从css控制页面
ele.setAttribute('key','value');
</script>
三、事件高级(解决循环绑定产生的变量变质处理的两种方式)
1、第一种(将全局变量i添加到各自标签的属性中)
<style>
.box{
width: 100px;
height: 100px;
background-color: red;
margin-top: 10px;
}
</style>
<body>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</body>
<script>
var divs=document.querySelectorAll('.box');
for (var i=0;i<divs.length;i++){
//将全局变量i添加到各自标签的属性中
divs[i].index=i;
divs[i].onclick=function () {
console.log(this.index);
}
}
</script>
2、第二种方式(将i改成块作用域)
<script>
var divs=document.querySelectorAll('.box');
for (let i=0;i<divs.length;i++){
divs[i].onclick=function () {
console.log(i);
}
}
</script>
3、函数闭包解决
//v1
<script>
var divs=document.querySelectorAll('.box');
for (var i=0;i<divs.length;i++){
(function (){
var index=i
divs[index].onclick=function () {
console.log(index);
}
})()
}
</script>
//v2
<script>
var divs=document.querySelectorAll('.box');
for (var i=0;i<divs.length;i++){
(function (index){
divs[index].onclick=function () {
console.log(index);
}
})(i)
}
</script>
//v3
<script>
var divs=document.querySelectorAll('.box');
for (var i=0;i<divs.length;i++){
(function (i){
divs[i].onclick=function () {
console.log(i);
}
})(i)
}
</script>
四、事件的绑定与取消
1、应用
<style>
div{
margin-top: 10px;
}
.box{
width: 100px;
height: 100px;
background:lawngreen;
}
.btn{
height: 20px;
width: 40px;
background: black;
color: white;
text-align: center;
line-height: 20px;
}
</style>
<body>
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="btn">开始</div>
<script>
var boxs=document.querySelectorAll('.box');
var ele=document.querySelector('.btn');
//初始化给定标签行间式颜色
var count=0;
ele.onclick=init;
function beginColor(){
for (let i =0;i<boxs.length;i++){
boxs[i].style.backgroundColor='red'
}
}
function overInterface() {
for (let i=0;i<boxs.length;i++){
console.log(1111111111)
boxs[i].onclick=null;
count=0;
}
}
function changeDivColoe() {
for(let i =0;i<boxs.length;i++){
boxs[i].onclick=function () {
console.log(22222)
if (boxs[i].style.backgroundColor=="red"){
this.style.backgroundColor='black';
count++;
}else {
this.style.backgroundColor='red';
count--;
}
if (count==3){
overInterface()
//count==3&&overInterface();
}
}
}
}
//开始事件
function init() {
console.log(1);
beginColor();
changeDivColoe();
}
</script>
2、绑定事件的两种方式及取消方式
<style>
div{
width: 50px;
height: 40px;
background: olive;
text-align: center;
line-height: 40px;
color: lawngreen;
margin-top: 10px;
}
</style>
<div class="event_on1">绑定一</div>
<div class="event_on2">绑定二</div>
<script>
//绑定事件的第一种方式(只能绑定一个事件)
var event_on1=document.querySelector('.event_on1');
console.log(event_on1);
event_on1.onclick=function () {
console.log(1)
};
event_on1.onclick=function () {
console.log(2)
};
//取消第一种绑定事件
evet_onclick=null;
//绑定事件的第二种方式(可以同时绑定两个时间)
var event_on2=document.querySelector('.event_on2');
console.log(event_on2);
var action=function () {
console.log("a")
}
event_on2.addEventListener('click',action);
event_on2.addEventListener('click',function () {
console.log("b");
});
//事件的移除,需要讲绑定事件的匿名函数赋值给一个变量,然后移除变量的内存地址
event_on2.removeEventListener('click',action)
</script>
五、事件对象的冒泡现象及解决方法
冒泡:触发子集绑定事件也会触发父集绑定的事件
<style>
.outer{
width: 100px;
height: 100px;
background:paleturquoise;
}
.inner{
height: 50px;
width: 50px;
background: black;
}
</style>
<div class="outer">
<div class="inner"></div>
</div>
<body>
<script>
var outer=document.querySelector('.outer');
var inner=document.querySelector('.inner');
inner.onclick=function (a) {
//取消事件对象冒泡
a.cancelBubble=true;
console.log('inner')
};
outer.onclick=function () {
console.log('outer')
}
原文地址:https://www.cnblogs.com/chuwanliu/p/11042462.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP操作路由器实现方法示例
- python能在浏览器能运行吗
- Python使用OpenPyXL处理Excel表格
- php如何比较两个浮点数是否相等详解
- keras 回调函数Callbacks 断点ModelCheckpoint教程
- Mac下快速搭建PHP开发环境步骤详解
- PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
- Ajax+PHP实现的模拟进度条功能示例
- python实例化对象的具体方法
- PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
- YII框架关联查询操作示例
- Keras之fit_generator与train_on_batch用法
- django美化后台django-suit的安装配置操作
- python读取excel进行遍历/xlrd模块操作
- 浅谈Keras的Sequential与PyTorch的Sequential的区别