arguments的使用 arguments展示形式是一个伪数组,因此可以进行遍历。伪数组 具有以下特点:
具有length属性
按索引方式存储数据
不具有数组的push,pop等方法
1 2 3 4 5 6 7 8 9 <script> function fn ( ) { console .log(arguments ); console .log(arguments .length); console .log(arguments [2 ]) } fn(1 , 2 , 3 ); </script>
翻转数组
1 2 3 4 5 6 7 8 9 10 11 <script> function reverse (arr ) { var newArr = []; for (var i = arr.length - 1 ; i >= 0 ; i--) { newArr[newArr.length] = arr[i]; } return newArr; } console .log(reverse([1 , 2 , 3 , 4 , 5 , 6 ])); </script>
函数的两种声明方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <script> function fn ( ) { } fn(); var fun = function (aru ) { console .log('我是函数表达式' ); console .log(aru); } fun('花花' ); </script>
作用域 现阶段的js没有块作用域
作用域链
只要是代码,就至少有一个作用域
写在函数内部的局部作用域
如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作作用域链。
1 2 3 4 5 6 7 8 9 10 11 12 <script> var num=10 ; function fu ( ) { var num =20 ; function fun ( ) { console .log(num); } } </script>
创建对象的三种方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <script> var obj = { uname: '张三丰' , age: 18 , sex: '男' , sayHi: function ( ) { console .log('hi~' ); } } console .log(obj.uname); console .log(obj['age' ]); obj.sayHi(); </script>
利用new Object创建对象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 <script> var obj = { uname: '张三丰' , age: 18 , sex: '男' , sayHi: function ( ) { console .log('hi~' ); } } console .log(obj.uname); console .log(obj['age' ]); obj.sayHi(); var dog = { umame: '可可' , type: '阿拉斯加犬' , age: 5 , color: 'red' , bark: function ( ) { console .log('汪汪汪~' ); } showFile: function ( ) { console .log('演电影~' ); } } console .log(dog.umame); </script>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <script> var obj = new Object (); obj.uname = '张三丰' ; obj.age = 18 ; obj.sex = '男' ; obj.sayHi = function ( ) { console .log('hi~' ); } console .log(obj.uname); console .log(obj['sex' ]); obj.sayHi(); var ming = new Object (); ming.uname = '鸣人' ; ming.sex = '男' ; ming.age = 19 ; ming.skill = function ( ) { console .log('影分身术' ); } console .log(ming.age); </script>
利用构造函数创建对象
function 构造函数() {
this.属性=值 ;
this.方法=function() {}
}
new 构造方法();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <script> function Star (umame, age, sex ) { this .name = umame; this .age = age; this .sex = sex; this .sing = function (sang ) { console .log(sang); } } var ldh = new Star('刘德华' , 18 , '男' ); console .log(typeof ldh); console .log(ldh.name); console .log(ldh['sex' ]); ldh.sing('冰雨' ); </script>
内置对象 查文档 MDN 提供有关开放网络技术的信息,包含HTML,CSS和万维网及HTML5应用的API
MDN Web Docs (mozilla.org)
Math对象 math绝对值方法:
可以把字符串型隐式转换为数值型
Math.PI //圆周率
Math.floor() //向下取整
Math.ceil() //向上取整
Math.round() //四舍五入 Math.abs() //绝对值
得到一个两数之间的随机整数,包括两个数在内
Math.floor(Math.random()*(max-min+1))+min
日期对象 日期格式化
数组对象 创建数组的两种方式
1 2 3 4 5 6 7 8 9 10 11 12 <script> var arr = [1 , 2 , 3 ]; console .log(arr[0 ]); var arr1 = new Array (2 ); console .log(arr1); var arr2 = new Array (2 , 3 ) console .log(arr2); </script>
检测数组元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <script> function reverse (arr ) { if (arr instanceof Array ) { var newArr = []; for (var i = arr.length - 1 ; i > -0 ; i--) { newArr[newArr.length] = arr[i]; } return newArr; } else { return '这个格式必须是数组格式' ; } } console .log(reverse([1 , 2 , 3 ])); console .log(reverse(1 , 2 , 3 )); var arr = []; var obj = {}; console .log(arr instanceof Array ); console .log(obj instanceof Array ); console .log(Array .isArray(arr)); </script>
末尾追加
arr.push(1);
前面添加
arr.unshift(‘1’);
删除数组最后的元素
arr.pop()
返回删除的元素
删除数组的第一个元素
arr.shift(1);
返回删除的元素
追加数组元素
newArr.push(arr[i])
数组翻转 arr.reverse();
数组排序 arr.sort();
1 2 3 4 5 6 7 <script> var arr = [13 , 4 , 77 , 1 , 7 ]; arr.sort(function (a, b ) { return a - b; }); console .log(arr); </script>
返回数组元素索引方法
arr.indexOf(‘blue’);//只返回第一个满足条件的元素,找不到返回-1
arr.lastindexOf(‘blue’) //从后面往前面查找
数组去重 1 2 3 4 5 6 7 8 9 10 11 12 13 <script> function unique (arr ) { var newArr = []; for (var i = 0 ; i < arr.length; i++) { if (newArr.indexOf(arr[i]) === -1 ) { newArr.push(arr[i]); } } return newArr; } var demo = unique(['blue' , 'green' , 'blue' ]); console .log(demo); </script>
数组转换为字符串 toString()
arr.toString()//默认逗号分隔 join(‘分隔符’)
arr.join(‘-‘)
concat()连接两个或者多个数组-返回一个新数组,原数组不影响
slice()数组截取slice(begin,end) 返回被截取项目的新数组
splice(第几个开始,要删除的个数)数组删除 返回删除项目的新数组,会影响原数组
字符串对象 字符串本身不可变,不要拼接大量字符串,会造成内存卡顿
字符串查找 var str=’江畔何人初见月,江月何年初照人’;
console.log(str.indexOf(‘月’));
console.log(str.indexOf(‘月’,3));//后面的参数是开始查找的位置
lastindexOf同理
字符串返回字符 str.charAt(i);
返回相应索引字符的ASCII码 str.charCodeAt(i)
str[i]; //h5新增
截取 substr(‘截取的起始位置’,’截取几个’)
替换 replace(‘被替换的字符’,’替换为字符’)
字符串转换为字符 split(‘分隔符’)
Web APIs阶段
Web API是浏览器提供的一套操作浏览器功能和页面元素的API(BOM和 DOM)
https://developer.mozilla.org/zh-CN/docs/Web/API
DOM 获取元素 根据id获取
getElementById
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <body > <div id ="time" > 2019-9-9</div > <script > var timer = document .getElementById('time' ); console .log(timer); console .log(typeof timer); console .dir(timer); </script > </body >
根据标签名获取 getElementsByTagName()
注意父元素必须是单个对象(必须指明是哪一个元素对象)获取的时候不包括父元素自己
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <body> <ul> <li>知否知否,应是绿肥红瘦1 </li> <li>知否知否,应是绿肥红瘦</li> <li>知否知否,应是绿肥红瘦</li> <li>知否知否,应是绿肥红瘦</li> <li>知否知否,应是绿肥红瘦</li> </ul> <ol> <li>孤身只影我向谁去1 </li> <li>孤身只影我向谁去</li> <li>孤身只影我向谁去</li> <li>孤身只影我向谁去</li> <li>孤身只影我向谁去</li> </ol> <script> var lis = document .getElementsByTagName('li' ); console .log(lis); console .log(lis[0 ]); for (var i = 0 ; i < lis.length; i++) { console .log(lis[i]); } var ols = document .getElementsByTagName('ol' ); for (var i = 0 ; i < ols.length; i++) { console .log(ols[i].getElementsByTagName['li' ]); } </script> </body>
通过html5新增方法获取 document.getElementsByClassName(‘类名’); //根据类名返回元素对象集合
document.querySelector(‘选择器’); //根据指定选择器返回第一个元素
document.querySelectorAll(‘选择器’); //根据指定选择器返回
获取特殊元素 1 2 3 4 5 6 7 8 9 10 <script> var bodyEle = document .body; console .log(bodyEle); var htmlEle = document .documentElement; console .log(htmlEle); </script>
事件基础 事件三要素:事件源 事件类 事件处理程序
1 2 3 4 5 6 7 8 9 10 11 12 <body > <button id ="btn" > 唐伯虎</button > <script > var btn = document .getElementById('btn' ); btn.onclick = function ( ) { alert('点秋香' ); } </script > </body >
执行事件的步骤
获取事件源
注册时间(绑定事件)
添加事件处理程序(采取函数赋值形式)
常见鼠标事件
鼠标事件
触发条件
onclick
鼠标点击左键触发
onmouseover
鼠标经过触发
onmouseout
鼠标离开触发
onfocus
获取鼠标焦点触发
onblur
失去鼠标焦点触发
onmousemove
鼠标移动触发
onmouseup
鼠标弹起触发
onmousedown
鼠标按下触发
操作元素
js的DOM操作可以改变网页内容、结构和样式,我们可以利用DOM操作元素来改变元素里面的内容,属性等。注意以下都是属性。
改变元素内容
element.innerText
从起始位置到终止位置的内容,但它去除html标签,同时空格和换行也会去掉
element.innerHTML
起始位置到终止位置的全部内容,包含html标签,同时保留空格和换行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 <title > Document</title > <style > div , p { width : 300px ; height : 30px ; line-height : 30px ; color : #fff ; background-color : pink; } </style > </head > <body > <button > 显示当前系统事件</button > <div > 某个时间</div > <p > 1223</p > <script > var btn = document .querySelector('button' ); var div = document .querySelector('div' ); btn.onclick = function ( ) { div.innerText = getDate(); } function getDate ( ) { var date = new Date (); console .log(date.getFullYear()); console .log(date.getMonth() + 1 ); console .log(date.getDate()); console .log(date.getDay()); var year = date.getFullYear(); var month = date.getMonth() + 1 ; var day = date.getDate(); return '今天是' + year + '年' + month + '月' + day + '日' ; } var p = document .querySelector('p' ); p.innerText = getDate(); </script >
innerText和innerHTML的区别
innerText不识别html标签
1 2 var div = document .querySelector('div' );div.innerText='<strong>今天是:</strong> 2019' ;
innerHTML 识别html标签
1 div.innerHTML='<strong>今天是:</strong> 2019' ;
常用元素的属性操作
innerText、innerHTML 改变元素内容
src、href
id、alt、title
修改元素属性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <body > <button id ="one" > one</button > <button id ="two" > two</button > <img src ="images/two.jpg" alt ="" > <script > var one = document .getElementById('one' ); var two = document .getElementById('two' ); var img = document .querySelector('img' ); one.onclick = function ( ) { img.src = 'images/two.jpg' ; } two.onclick = function ( ) { img.src = 'images/one.jpg' ; } </script > </body >
根据时间修改文字内容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <body > <img src ="images/loading.gif" alt ="" > <div > 上午好 </div > <script > var img = document .querySelector('img' ); var div = document .querySelector('div' ); var date = new Date (); var h = date.getHours(); console .log(h); if (h < 12) { img.src = 'images/loading.gif' ; div.innerHTML = '亲,上午好,好好写代码!' ; } else if (h < 18 ) { img.src = 'images/one.jpg' ; div.innerHTML = '亲,下午好,好好写代码!' ; } else { img.src = 'images/two.jpg' ; div.innerHTML = '亲,晚上好,好好写代码!' ; } </script > </body >
京东密码案例
核心思路:点击眼睛按钮,把密码类型改为文本框就可以看见里面的密码
一个按钮两个状态,点击一次,切换文本框,继续点击一次切换为密码框
算法:利用一个flag变量,来判断flag值,如果是1就切换为文本框,flag设置为0.如果是0就切换为密码框,flag设置为1
修改样式属性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <style > div { width : 200px ; height : 200px ; background-color : pink; } </style > </head > <body > <div > </div > <script > var div = document .querySelector('div' ); div.onclick = function ( ) { this .style.backgroundColor = 'blue' ; this .style.width = '250px' ; } </script > </body >
注意:
JS里面的样式采取驼峰命名法 比如fontSize,backgroundColor
JS修改style样式操作,产生的是行内样式,CSS权重比较高
淘宝二维码隐藏案例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 <title > Document</title > <style > .box { position : relative; width : 74px ; height : 88px ; border : 1px ; margin : 100px ; font-size : 12px ; text-align : center; color : #f40 ; } .box img { width : 60px ; margin-top : 5px ; } .close-btn { position : absolute; top : -1px ; left : -16px ; width : 14px ; border : 1px solid #ccc ; line-height : 14px ; font-family : Arial, Helvetica, sans-serif; cursor : pointer; } </style > </head > <body > <div class ="box" > 淘宝二维码 <img src ="images/taobao.png" alt ="" > <i class ="close-btn" > ×</i > </div > <script > var btn = document .querySelector('.close-btn' ); var box = document .querySelector('.box' ); btn.onclick = function ( ) { box.style.display = 'none' ; } </script > </body >
循环实现淘宝精灵图 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 <style > .box { width : 250px ; margin : 100px auto; } .box li { float : left; width : 24px ; height : 24px ; background-color : pink; margin : 15px ; background : url (images/sprites.png ) no-repeat; list-style-type : none; } </style > </head > <body > <div class ="box" > <ul > <li > </li > <li > </li > <li > </li > <li > </li > <li > </li > <li > </li > <li > </li > <li > </li > <li > </li > <li > </li > <li > </li > <li > </li > </ul > </div > <script > var lis = document .querySelectorAll('li' ); for (var i = 0 ; i < lis.length; i++) { var index = i * 44 ; lis[i].style.backgroundPosition = '0 -' + index + 'px' ; } </script > </body >
显示隐藏文本框 的内容 当鼠标点击文本框时,里面默认的文字隐藏,当鼠标离开文本框时,里面的文字显示。
表单需要两个事件,获得焦点onfocus 失去焦点onblur
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <style > input { color : #999 ; } </style > </head > <body > <input type ="text" value ="手机" > <script > var text = document .querySelector('input' ); text.onfocus = function ( ) { console .log('得到了焦点' ); if (this .value === '手机' ) { this .value = '' ; } this .style.color = '#333' ; } text.onblur = function ( ) { console .log('失去了焦点' ); if (this .value === '' ) { this .value = '手机' ; } this .style.color = '#999' ; } </script > </body >
className 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <title > Document</title > <style > div { width : 200px ; height : 200px ; background-color : pink; } .change { background-color : purple; color : #fff ; font-size : 25px ; margin-top : 100px ; } </style > </head > <body > <div class ="first" > 文本</div > <script > var test = document .querySelector('div' ); test.onclick = function ( ) { this .className = "first change" ; } </script > </body >
密码框格式提示错误信息 用户如果离开密码框,里面输入的个数不是6~16,则提示错误信息,否则提示输入正确信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 <style > .box { position : relative; width : 400px ; border-bottom : 1px solid #ccc ; margin : 100px auto; } .box input { width : 370px ; height : 30px ; border : 0 ; outline : none; } .box img { position : absolute; width : 24px ; top : 2px ; right : 2px ; width : 24px ; } </style > </head > <body > <div class ="box" > <label for ="" > <img src ="images/cannotsee.png" alt ="" id ="eye" > </label > <input type ="password" name ="" id ="pwd" > </div > <script > var eye = document .getElementById('eye' ); var pwd = document .getElementById('pwd' ); var flag = 0 ; eye.onclick = function ( ) { if (flag == 0) { pwd.type = 'text' ; eye.src = 'images/eye.png' ; flag = 1; } else { pwd.type = 'password' ; flag = 0; eye.src = 'images/cannotsee.png' ; } } </script > </body >
通过className更改元素样式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <style > div { width : 200px ; height : 200px ; background-color : pink; } .change { background-color : purple; color : #fff ; font-size : 25px ; margin-top : 100px ; } </style > </head > <body > <div class ="first" > 文本</div > <script > var test = document .querySelector('div' ); test.onclick = function ( ) { this .className = "first change" ; } </script > </body >
仿新浪注册页面 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 <style > div { position : relative; width : 600px ; margin : 100px auto; } .message { display : inline-block; font-size : 12px ; color : #999 ; padding-left : 20px ; text-align : center; background : url (images/提示.png ) no-repeat left center; } .wrong { color : red; background : url (images/错误.png ) no-repeat left center; } .right { color : rgb (131 , 199 , 131 ); background : url (images/正确.png ) no-repeat left center; } </style > </head > <body > <div class ="register" > <input type ="password" name ="" id ="" class ="ipt" > <p class ="message" > 请输入6~16位密码</p > </div > <script > var ipt = document .querySelector('.ipt' ); var message = document .querySelector('.message' ); ipt.onblur = function ( ) { if (this .value.length < 6 || this .value.length > 16 ) { message.className = 'message wrong' ; message.innerHTML = '你输入的密码个数不正确 要求6~16位' ; } else { message.className = 'message right' ; message.innerHTML = '设置密码成功' ; } } </script > </body >
操作元素总结 ![img](C:\Users\lenovo\Documents\Tencent Files\3032964348\Image\C2C\Image2\E7L85X)0B)]$YKX3X[NPY6.png)
作业:
世纪佳缘
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 <head > <style > input { color : #ccc ; border : 1px solid #ccc ; } </style > </head > <body > <input type ="text" value ="邮箱/ID/手机号" class ="id" > <input type ="text" value ="密码" class ="pwd" > <script > var text = document .querySelector('input' ); var pwd = document .querySelector('.pwd' ); text.onfocus = function ( ) { if (this .value === '邮箱/ID/手机号' ) { this .value = '' ; } this .style.color = '#999' ; this .style.borderColor = 'pink' ; this .style.outline = 'none' ; } text.onblur = function ( ) { if (this .value === '' ) { this .value = '邮箱/ID/手机号' ; } this .style.borderColor = '#ccc' ; } pwd.onfocus = function ( ) { console .log('得到了焦点' ); if (this .value === '密码' ) { this .value = '' ; } this .style.color = '#999' ; this .style.borderColor = 'pink' ; this .style.outline = 'none' ; } pwd.onblur = function ( ) { if (this .value === '' ) { this .value = '密码' ; } this .style.borderColor = '#ccc' ; } </script > </body >
京东广告隐藏
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <style > .box { position : relative; } .btn-close { position : absolute; height : 20px ; width : 20px ; background-color : rgb (88 , 19 , 173 ); right : 450px ; color : rgb (114 , 53 , 192 ); font-size : 20px ; } </style > </head > <body > <div class ="box" > <img src ="images/jingdong.png" alt ="" > <i class ="btn-close" > ×</i > </div > <script > var btn = document .querySelector('.btn-close' ); var img = document .querySelector('img' ); btn.onclick = function ( ) { img.style.display = 'none' ; this .style.display = 'none' ; } </script > </body >
排他思想 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > Document</title > </head > <body > <button > 按钮1</button > <button > 按钮2</button > <button > 按钮3</button > <button > 按钮4</button > <button > 按钮5</button > <script > var btns = document .getElementsByTagName('button' ); for (var i = 0 ; i < btns.length; i++) { btns[i].onclick = function ( ) { for (var i = 0 ; i < btns.length; i++) { btns[i].style.backgroundColor = '' ; } this .style.backgroundColor = 'pink' ; } } </script > </body > </html >
百度换肤 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 <style > ul { width : 520px ; margin : 50px auto; list-style : none; } li { width : 130px ; height : 80px ; float : left; } ul li img { width : 130px ; height : 80px ; } body { background : url (./images/1.jpg ) no-repeat; } </style > <ul class ="huanfu" > <li > <img src ="./images/1.jpg" alt ="" > </li > <li > <img src ="./images/2.jpg" alt ="" > </li > <li > <img src ="./images/3.jpg" alt ="" > </li > <li > <img src ="./images/4.jpg" alt ="" > </li > <script > var imgs = document .querySelector('.huanfu' ).querySelectorAll('img' ); for (var i = 0 ; i < imgs.length; i++) { imgs[i].onclick = function ( ) { document .body.style.backgroundImage = 'url(' + this .src + ')' ; } } </script > </ul >
隔行变色效果 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Document</title > <style > table td ,table th { width : 170px ; height : 40px ; text-align : center; border-bottom : 1px solid rgb (195 , 195 , 195 ); } thead { color : rgb (6 , 6 , 161 ); background : rgb (220 , 220 , 255 ); } td :nth-child (1 ), td :nth-child (2 ){ color : rgb (6 , 6 , 161 ); } td :nth-child (6 ){ color :red; } .bg{ background : pink; } </style > </head > <body > <table cellspacing ="0" cellpadding ="0" > <thead > <tr class ="top" > <th > 代码</th > <th > 名称</th > <th > 最新净值</th > <th > 累计净值</th > <th > 前单位净值</th > <th > 净值增长率</th > <th > 公布日期</th > </tr > </thead > <tbody > <tr > <td class ="but" > 00325</td > <td > 广发理财30天债券</td > <td > 0.958</td > <td > 3.389</td > <td > 0.000</td > <td > 0.000%</td > <td > 2019-01-16</td > </tr > <tr > <td > 00325</td > <td > 广发理财30天债券</td > <td > 0.958</td > <td > 3.389</td > <td > 0.000</td > <td > 0.000%</td > <td > 2019-01-16</td > </tr > <tr > <td > 00325</td > <td > 广发理财30天债券</td > <td > 0.958</td > <td > 3.389</td > <td > 0.000</td > <td > 0.000%</td > <td > 2019-01-16</td > </tr > <tr > <td > 00325</td > <td > 广发理财30天债券</td > <td > 0.958</td > <td > 3.389</td > <td > 0.000</td > <td > 0.000%</td > <td > 2019-01-16</td > </tr > <tr > <td > 00325</td > <td > 广发理财30天债券</td > <td > 0.958</td > <td > 3.389</td > <td > 0.000</td > <td > 0.000%</td > <td > 2019-01-16</td > </tr > <tr > <td > 00325</td > <td > 广发理财30天债券</td > <td > 0.958</td > <td > 3.389</td > <td > 0.000</td > <td > 0.000%</td > <td > 2019-01-16</td > </tr > </tbody > </table > </body > <script > var trs=document .querySelector('tbody' ).querySelectorAll('tr' ); for (var i=0 ;i<trs.length;i++){ trs[i].onmouseover=function ( ) { this .className="bg" ; } trs[i].onmouseout=function ( ) { this .className=' ' ; } } </script > </html >
全选反选 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 <style > * { padding : 0 ; margin : 0 ; } .wrap { width : 300px ; margin : 100px auto 0 ; } table { border-collapse : collapse; border-spacing : 0 ; border : 1px solid #c0c0c0 ; width : 300px ; } th , td { border : 1px solid #d0d0d0 ; color : #404060 ; padding : 10px ; } th { background-color : #09c ; font-size : 16px ; color : #fff ; } td { font-size : 14px ; } tbody tr { background-color : #f0f0f0 ; } tbody tr :hover { cursor : pointer; background-color : #fafafa ; } </style > <body > <div class ="wrap" > <table > <thead > <tr > <th > <input type ="checkbox" id ="theadInp" /> </th > <th > 英雄名</th > <th > 国籍</th > </tr > </thead > <tbody id ="tbody" > <tr > <td > <input type ="checkbox" /> </td > <td > 拉克丝</td > <td > 德玛西亚</td > </tr > <tr > <td > <input type ="checkbox" /> </td > <td > 德莱文</td > <td > 诺克萨斯</td > </tr > <tr > <td > <input type ="checkbox" /> </td > <td > 蒙多</td > <td > 祖安</td > </tr > <tr > <td > <input type ="checkbox" /> </td > <td > 艾希</td > <td > 弗雷尔卓德</td > </tr > </tbody > </table > </div > <script > window .onload = function ( ) { var topInp = document .getElementById("theadInp" ); var tbody = document .getElementById("tbody" ); var botInpArr = tbody.getElementsByTagName("input" ); topInp.onclick = function ( ) { for (var i=0 ;i<botInpArr.length;i++){ botInpArr[i].checked = this .checked; } } for (var i=0 ;i<botInpArr.length;i++){ botInpArr[i].onclick = function ( ) { var bool = true ; for (var j=0 ;j<botInpArr.length;j++){ if (botInpArr[j].checked == false ){ bool = false ; } } topInp.checked = bool; } } } </script > </body >
自定义属性 获取属性值
设置属性值
element.属性=’值’
element.setAttribute(‘属性’,’值‘);
div.className=”navs”
div.setAttribute(‘class’,’footer’);
移除属性
div.removeAttribute(‘index’);
tab栏切换 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 <!DOCTYPE html > <html > <head > <meta charset ="utf-8" > <title > tab切换</title > <style > * { margin : 0 ; padding : 0 ; } li { list-style-type : none; } .tab { width : 978px ; margin : 100px auto; } .tab_list { height : 39px ; border : 1px solid #ccc ; background-color : #f1f1f1 ; } .tab_list li { float : left; height : 39px ; line-height : 39px ; padding : 0 20px ; text-align : center; cursor : pointer; } .tab_list .current { background-color : #c81623 ; color : #fff ; } .item_info { padding : 20px 0 0 20px ; } .item { display : none; } </style > </head > <body > <div class ="tab" > <div class ="tab_list" > <ul > <li class ="current" > 商品介绍</li > <li > 规格与包装</li > <li > 售后保障</li > <li > 商品评价(50000)</li > <li > 手机社区</li > </ul > </div > <div class ="tab_con" > <div class ="item" style ="display: block;" > 商品介绍模块内容 </div > <div class ="item" > 规格与包装模块内容 </div > <div class ="item" > 售后保障模块内容 </div > <div class ="item" > 商品评价(50000)模块内容 </div > <div class ="item" > 手机社区模块内容 </div > </div > </div > <script type ="text/javascript" > var tab_list = document .querySelector(".tab_list" ); var lis = tab_list.querySelectorAll("li" ); var items = document .querySelectorAll(".item" ); for (var i = 0 ; i < lis.length; i++) { lis[i].setAttribute("index" ,i); lis[i].onclick = function ( ) { for (var i = 0 ; i < lis.length; i++) { lis[i].className = "" ; } this .className = "current" ; var index = this .getAttribute("index" ); for (var i = 0 ; i < items.length; i++) { items[i].style.display = "none" ; } items[index].style.display = "block" ; } } </script > </body > </html >
h5自定义属性 data-index=”1” 或者用js设置
element.setAttribute(‘data-index’,2)
获取属性值
h5新增:
div.dataset.index
data-list-name
多个-,dataset必须要用驼峰 命名法
div.dataset[‘listName’]
节点操作 逻辑性更强,但是兼容性稍差
节点概述
元素节点 nodeType 为1
属性节点 nodeType 为2
文本节点 nodeType 为3(文本节点包含文字,空格,换行等)
父级节点
node.parentNode
parentNode属性可返回某节点的父结点,注意时最近的一个父结点
如果没有指定的节点则返回null
子节点
ul(父结点).chilren //获取所有元素的节点
ul.firstElementChild(兼容性问题)
ul.lastElementChild
实际开发写法
ol.children[0];
ol.children[ol.chilren.length-1]
兄弟节点
div.nextElementSibling
div.previousElementSibling
创建和添加节点 1 2 3 4 5 6 7 8 9 10 11 12 13 <body > <ul > </ul > <script > var li = document .createElement('li' ); var ul = document .querySelector('ul' ); ul.appendChild(li); var lili = document .childElementCount('li' ); ul.insertBefore(lili, ul.children[0]); </script > </body >
node.removeChilde(child) 删除一个子节点,返回删除
删除留言案例 1 2 3 4 5 6 7 8 var as = document .querySelectorAll('a' ); for (var i = 0 ; i < as .length; i++) { as [i].onclick = function ( ) { ul.removeChild(this .parentNode); } }
复制结点
node.cloneNode()
返回调用该方法的节点的一个副本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <body > <ul > <li > 1</li > <li > 2</li > <li > 3</li > </ul > <script > var ul = document .querySelector('ul' ); var lili = ul.children[0 ].cloneNode(true ); ul.appendChild(lili); </script > </body >
注册事件的两种方式 实际开发中用addEventListener()
attachEvent 只有ie9以前版本支持