1 break与continue
-
continue 结束本次循环
-
break 结束整个循环
2. 双重for循环
如果循环体又是一个循环 只有把内侧循环走完,才会继续执行外侧循环
-
二维数组
-
双重for循环生成标签
3 JSON数据/object数据类型
-
object数据类型就是JSON数据,也叫对象
-
对象/object/JSON数据:一组无序的 没有长度的数据 也是可以存储多个 可以存储任意数据类型
{ 属性名/key/键:属性值/value/值 } 注意:属性名 可加可不加引号 注意:数据和数据之间用逗号隔开
3. for-in
<script> // for-in 遍历对象 var obj = { "name": "小候老师", age: 20, "sex": "男", isOn: true, a: null, b: undefined, c: [1, 2, 3, 4], d: { "skill": "第一阶段" }, f: function () { } //函数 函数在对象里面 我们一般叫方法 } // for(var 变量名 in 对象){ 循环体} // 注意 对象有几个数据就遍历几次 遍历完自动结束循环 for (var i in obj) { // i 里面存储的是属性名 i = "name" i="age" i="sex" // 如果属性名是一个变量 obj[变量名] console.log(obj[i]) } </script>
4. this
4.1 为什么用this
<body> <div>盒子1</div> <div>盒子2</div> <div>盒子3</div> <div>盒子4</div> <div>盒子5</div> <script> var oDiv = document.getElementsByTagName("div"); oDiv[0].onclick = function(){ console.log(oDiv[0].innerHTML) } oDiv[1].onclick = function(){ console.log(oDiv[1].innerHTML) } console.log(oDiv.length);//5 // 通过for循环添加点击事件 for(var i = 0;i<oDiv.length;i++){ // 循环添加事件 事件不会立马执行 但是for循环执行完毕 // 点击盒子的时候 才会执行事件里面的代码 此时i的值是5 oDiv[i].onclick = function(){ console.log(i);//5 console.log(oDiv[i]);//undefined } } // i = 5 </script> </body>
3.2 this指向
-
this 这个的意思
-
在不同的地方 this指向的内容不同 取决于当前函数被调用时所处的环境
-
事件处理函数 : 标签.事件类型 = function() { 要做的事}
-
==在事件处理函数中 ------ this指向触发事件的对象----点谁指向谁==
-
-
基础使用
<button>按钮1</button> <script> var btn = document.getElementsByTagName("button")[0]; // 事件处理函数this的指向----指当前触发事件的对象----点谁指向谁 btn.onclick = function(){ console.log(this)//指向button标签 }=--= </script>
-
this的指向---练习
<body> <div>盒子1</div> <div>盒子2</div> <div>盒子3</div> <div>盒子4</div> <div>盒子5</div> <script> var oDiv = document.getElementsByTagName("div"); oDiv[0].onclick = function(){ console.log(oDiv[0].innerHTML) } oDiv[1].onclick = function(){ console.log(oDiv[1].innerHTML) } console.log(oDiv.length);//5 // 通过for循环添加点击事件 for(var i = 0;i<oDiv.length;i++){ // 循环添加事件 事件不会立马执行 但是for循环执行完毕 // 点击盒子的时候 才会执行事件里面的代码 此时i的值是5 oDiv[i].onclick = function(){ // console.log(i);//5 // console.log(oDiv[i]);//undefined // 利用this解决这个问题 // 标签.innerHTML // this---当前触发事件的对象 console.log(this) console.log(this.innerHTML) } } // i = 5 </script>
4.3 开关效果
3.1.1 单组开发效果
-
现象:一个事件里面有两种状态
-
解决
-
定义一个变量 用于标识当前的状态
-
通过判断不同变量的状态 选择执行不同的逻辑
-
当状态发生改变的时候 变量的值需要做改变
-
<div></div> <script> var oDiv = document.getElementsByTagName("div")[0]; var tag = true;//true---200px false-50px oDiv.onclick = function(){ // oDiv.style.height = "200px"; if(tag){ //开 200px oDiv.style.height = "200px"; tag = false; }else{//关 50px oDiv.style.height = "50px"; tag = true; } } </script>
4.1.2 多组开发效果(问题版)
<body> <div>盒子1</div> <div>盒子2</div> <div>盒子3</div> <div>盒子4</div> <div>盒子5</div> <script> var oDiv = document.getElementsByTagName("div"); var tag = true;//true----200px false--50px // 利用for循环添加点击事件 for(var i = 0;i<oDiv.length;i++){ oDiv[i].onclick = function(){ // 通过for循环添加点击事件 在点击事件中无法拿到i的值 拿的永远是i最后一次值 if(tag){ this.style.height = "200px"; tag = false; }else{ this.style.height = "50px"; tag = true } } } /* 问题:公用了一个tag 交叉点击的时候 就出现了混乱 解决:每个盒子都定义一个属于自己的tag值 */ </script> </body>
4.4自定义属性
4.4.1什么是属性
-
什么是属性:存在开始标签上 属性名=属性值 例如class="box" id="wrap"
-
固有属性:系统给定的属性 例如 class id style href src
-
自定义属性:程序员自己定义的属性
-
4.4.2设置和获取自定义属性
-
如何设置和获取自定义属性
<body> <!-- class和id叫固有属性 a和b叫自定义属性 --> <div class="box" id="wrap" a="123" b="这是一个div标签"></div> <script> var oDiv = document.getElementsByTagName("div")[0]; /*--------------如何获取自定义属性 标签.属性名----------------------*/ //1.如果直接在标签上定义 可以在结构上看到 但是无法获取 console.log(oDiv.a);//undefined console.log(oDiv.b);//undefined // 2.通过js添加属性:结构上看不到 但是可以在js中获取 // 通过js设置自定义属性 标签.属性名 = 值 oDiv.c = "456"; console.log(oDiv.c);//456 </script> </body>
3.4.3自定义属性解决多组展开收起
-
多组展开收起(解决)
<body> <div >盒子1</div> <div>盒子2</div> <div>盒子3</div> <div>盒子4</div> <div>盒子5</div> <script> var oDiv = document.getElementsByTagName("div"); // var tag = true;//true----200px false--50px // 利用for循环添加点击事件 for (var i = 0; i < oDiv.length; i++) { oDiv[i].tag = true;//给每个盒子设置自定义属性tag=true oDiv[i].onclick = function () { console.log(this.tag)//点击谁 就获取谁的tag属性 // 通过for循环添加点击事件 在点击事件中无法拿到i的值 拿的永远是i最后一次值 if (this.tag) { this.style.height = "200px"; this.tag = false; } else { this.style.height = "50px"; this.tag = true; } } } /* 问题:公用了一个tag 交叉点击的时候 就出现了混乱 解决:每个盒子都定义一个属于自己的tag值 */ </script> </body>