使用JS完成表格的隔行换色
-
新标签的学习
<thead> <tr> <th></th> </tr> </thead> <tbody> <tr> <td></td> </tr> </tbody>
-
确定事件(页面加载事件onload)
-
获取元素: 获取表格(document.getElementById()),最终是为了获取表格中tbody里面的行数(长度)
- Tbody里面的行数(rows.length)
- JS的遍历(for 循环)
- 获取奇数行和偶数行(对遍历中角标对2取余)
- 设置背景颜色(.style.backgroundColor)
-
步骤分析
第一步: 确定事件(onload),并为其绑定一个函数
第二步: 书写函数(获取表格)
第三步: 获取tbody里面的行数
第四步: 对tbody里面的行数进行遍历
第五步: 获取奇偶行和偶数行(角标对2取余)
第六步: 分别对奇数行和偶数行设置背景颜色
-
代码实现
<script> //无名函数 window.onload = function() { //1.获取表格 var tbEle = document.getElementById("tbl"); //2.获取表格中tbody里面的行数(长度) var len = tbEle.tBodies[0].rows.length; // alert(len); //3.对tbody里面的行进行遍历 for(var i = 0; i < len; i++) { if (i % 2 == 0) { //4.对偶数行设置背景颜色 tbEle.tBodies[0].rows[i].style.backgroundColor = "pink"; } else { //5.对奇数行设置背景颜色 tbEle.tBodies[0].rows[i].style.backgroundColor = "yellow"; } } } </script>
实现一个表格的高亮显示
分析:
第一步: 确定事件(onmouseover 和 onmouseout)并分别为其绑定一个函数
第二步: 获取鼠标移上去的那行,对其设置背景颜色
第三步:移出鼠标,对其设置背景颜色
<script> function changeColor(id, flag) { if (flag == ‘over‘) { document.getElementById(id).style.backgroundColor="red"; } else if (flag == ‘out‘) { document.getElementById(id).style.backgroundColor="white"; } } </script> ? <body> <table border="1" width="500" height="50" align="center" id="trl"> <thead> <tr> <th>编号</th> <th>姓名</th> <th>年龄</th> </tr> </thead> <tbody> <tr onmouseover="changeColor(‘tr1‘, ‘over‘)" id="tr1" onmouseout="changeColor(‘tr1‘, ‘out‘)"> <td>1</td> <td>张三</td> <td>22</td> </tr > </tbody> </table> </body>
-
总结
之前使用过的事件(onsubmit/onclick/onload/ onfocus/onblur /onmouseover/onmouseout)
onfocus/onblur :
聚焦离焦事件,用于表单校验的时候比较合适
Onclick/ondblclick:
鼠标单击和双击事件
onkeydown/onkeypress:
搜索引擎使用较多
onload: 页面加载,就访问的代码,其他所有的操作(匿名方式)都可以放到这个绑定的函数里
onmouserover/onmouseout/onmousemove: 购物网站商品详情页
onsubmit: : 单提交事件
onchange: 当用户改变内容的时候使用这个事件(二级联动)
-
技术分析
确定事件(鼠标单击事件 onclick), 事件绑定到前面的复选框
获取编号前面的复选框的专题(是否选中)
? 获取复选框: var checkAllEle = document.getElementById("id")? 获取复选框的状态: checkAllEle.checked?
获取下面所有的复选框:
document.getElementByName("name")
-
步骤分析
第一步: 确定事件(onclick)并为其绑定一个函数
第二步: 书写函数(获取编号前面的复选框, 获取其状态)
第三步: 判断编号前面复选框的状态(如果为选中, 获取下面所有的复选框, 并将其状态置为选中)
第四步: 判断编号前面的复选框的状态(如果未选中, 获取下面所有的复选框, 并将其状态置为未选中)
<script> function checkAll() { //1.获取编号前面的复选框 var checkAllEle = document.getElementById("checkAll"); //2.对编号前面的复选框的状态进行判断 if (checkAllEle.checked == true) { //3.后去下面所有的复选框 var checkOnes = document.getElementsByName("checkOne"); for (var i = 0; i < checkOnes.length; i++) { //5.拿到每一个复选框,并将其状态置为选中 checkOnes[i].checked = true; } } else { //6.获取下面所有的复选框 var checkOnes = document.getElementsByName("checkOne"); //7.对获取的所有复选框进行遍历 for (var i = 0; i < checkOnes.length; i++) { //8.拿到每一个复选框,并将其状态置为未选中 checkOnes[i].checked = false; } } } </script> <html> <head> <title></title> <style></style> <link/> </head> <body> <span></span> <div> <img src=‘‘ /> </div> <p></p> </body> </html>
Document对象
Document: 整个html文件都成为一个document文档
Element: 所有的标签都是Element元素
Attribute: 标签里面的属性
Text: 标签中间夹着的内容为 text文本
Node: document,element、attribute、text统称为结点node
(getElementsByName(), getElementsByTagName() ) 后面两个方法获取之后需要遍历!
Element 对象
我们所认知的HTML页面中所有的标签都是element元素
element.appendChild() 向元素添加新的子节点,作为最后一个子节点
element.firstChild() 返回元素的首个子节点
element.getAttribute() 获得指定属性值
element.innerHTML 设置或返回元素的内容
element.insetBefore() 在指定的已有的子节点之前插入新节点.
element.setAtrribute()
Attribute对象
我们所认知的html页面中所有标签里面的属性都是attribute
attr.value 设置或返回属性的值
DOM练习
在页面中使用列表显示一些城市 <ul> <li>北京</li> <li>上海</li> <li>广州</li> </ul> 我们希望点击一个按钮实现动态添加城市 ? 分析: 事件(onclick) 获取ul元素节点 创建一个城市的文本节点 创建一个li元素节点 使用element里面的方法appendChild()来添加子节点
代码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>动态添加城市</title> <script> window.onload = function() { document.getElementById("btn").onclick = function() { //1.获取ul元素节点 var ulEle = document.getElementById("ul1"); //2.创建城市文本结点 var textNode = document.createTextNode("深圳"); //深圳 //3.创建li元素节点 var liEle = document.createElement("li"); // <li></li> //4.将城市文本结点添加到li元素中去 liEle.appendChild(textNode); //5.讲li添加到ui中去 ulEle.appendChild(liEle); } } </script> </head> <body> <input type="button" value="添加新城市" id="btn" /> <ul id="ul1"> <li>北京</li> <li>上海</li> <li>广州</li> </ul> </body> </html>
用JS完成省市二级联动
需求分析
希望在注册页面中添加一个字段(籍贯), 当用户选择一个具体的省份,在后面的下拉列表中动态加载该省份下所有的城市,显示效果如下
技术分析:
事件(onchange)
使用一个二维数组来存储省份和城市(二维数组的创建?)
获取用户选择的省份(使用方法传参的方式: this.value)
遍历数组 (获取省份与用户选择的省份比较, 如果相同了, 继续遍历该省份下所有的城市)
创建文本结点和元素结点,并进行添加操作
createTextNode / createElement appendChild()
步骤分析
第一步: 确定事件(onchange)并为其绑定一个函数
第二步: 创建一个二维数组用于存储省份和城市
第三步: 获取用户选择的省份
第四步: 遍历二维数组中的省份
第五步: 将遍历的与用户选择的省份比较
第六步: 如果相同,遍历该省份下的所有城市
第七步: 创建城市文本结点
第八步: 创建option元素结点
第九步: 将城市文本结点添加到option元素结点中去
第十步: 获取第二个下拉列表,讲option元素结点添加进去
第十一步: 每次操作前清空下拉列表的option内容
代码:
<script> ? //1.创建一个二维数组用于存储省份和城市 var cities = new Array(4); for (var i = 0; i < cities.length; i++) { cities[i] = new Array("武汉市" + i, "黄冈市" + i, "荆州市" + i); } function changeCity(val) { ? //7.获取第二个下拉列表 var cityEle = document.getElementById("city"); ? //9.清空第二个下拉列表的option内容 cityEle.options.length = 0; ? //2.遍历二维数组中的省份 for (var i = 0; i < cities.length; i++) { if (val == i) { //3.遍历用户选择省份下的城市 for (var j = 0; j < cities[i].length; j++) { //4.创建城市的文本操作 var textNode = document.createTextNode(cities[i][j]); //5.创建option元素结点 var opEle = document.createElement("option"); //6.将城市的文本结点添加到option元素结点 opEle.appendChild(textNode); //8.将option元素结点添加到第二个下拉列表中去 cityEle.appendChild(opEle); } } } } </script> ? <tr> <td>籍贯</td> <td> <!--2.确定事件,通过函数传参的方式拿到改变后的城市--> <select onchange="changeCity(this.value)"> <option>--请选择--</option> <option value="0">湖北</option> <option value="1">湖南</option> <option value="2">河南</option> <option value="3">河北</option> </select> <select id="city"> ? </select> </td> </tr>
JS的内置对象
- JS Array
- JS Boolean
- JS Date
- JS Math
- JS Number
- JS String
- JS RegExp