day4 DOM,BOM
1. BOM编程
1.1. BOM编程基础
全称 Browser Object Model,浏览器对象模型。
JavaScript是由浏览器中内置的javascript脚本解释器程序来执行javascript脚本语言的。
为了便于对浏览器的操作,javascript封装了对浏览器的各个对象使得开发者可以方便的操作浏览器。
1.2. BOM对象:
1.3. window 对象
Window 对象是 JavaScript 层级中的顶层对象。
Window 对象代表一个浏览器窗口或一个框架。
Window 对象会在 <body> 或 <frameset> 每次出现时被自动创建。
1.3.1. window中的方法
document 对 Document 对象的只读引用
location 用于窗口或框架的 Location 对象
history 对 History 对象的只读引用。
document.tilte 设置网页的标题
moveto() 将窗口左上角的屏幕位置移动到指定的 x 和 y 位置。
moveby() 相对于目前的位置移动。
resizeTo() 调整当前浏览器的窗口。
open() 打开新窗口显示指定的URL(有的浏览器中是打一个新的选项卡)
setTimeout(vCode, iMilliSeconds) 超时后执行代码。
setInterval(vCode, iMilliSeconds) 定时执行代码,第一次也是先待,到时再执行。
2. 事件
a) 事件说明
基本上所有的HTML元素中都可以指定事件属性。
每个元素支持什么样事件应查询文档。
所有的事件属性都是以on开头,后面的是事件的触发方式,如:
onclick,表示单击
onkeydown,表示键按下
...
b) 常用的事件类型:
鼠标点击相关:
onclick 在用户用鼠标左键单击对象时触发。
ondblclick 当用户双击对象时触发。
onmousedown 当用户用任何鼠标按钮单击对象时触发。
onmouseup 当用户在鼠标位于对象之上时释放鼠标按钮时触发。
鼠标移动相关:
onmouseout 当用户将鼠标指针移出对象边界时触发。
onmousemove 当用户将鼠标划过对象时触发。
焦点相关的:
onblur 在对象失去输入焦点时触发。
onfocus 当对象获得焦点时触发。
其他:
onchange 当对象或选中区的内容改变时触发。
onload 在浏览器完成对象的装载后立即触发。
onsubmit 当表单将要被提交时触发。
location 对象
Location 对象是由 JavaScript runtime engine 自动创建的,包含有关当前 URL 的信息。
location中的重要方法:
href属性 设置或获取整个 URL 为字符串。
reload() 重新装入当前页面
screen 对象
Screen 对象是由 JavaScript runtime engine 自动创建的,包含有关客户机显示屏幕的信息。
属性:
availHeight 获取系统屏幕的工作区域高度,排除 Microsoft Windows 任务栏。
availWidth 获取系统屏幕的工作区域宽度,排除 Windows 任务栏。
height 获取屏幕的垂直分辨率。
width 获取屏幕的水平分辨率。
示例:
document.write("屏幕工作区: " + screen.availHeight + ", " + screen.availWidth + "<br>");
document.write("屏幕分辨率: " + screen.height + ", " + screen.width + "<br>");
document对象
该对象代表整个文档页面
对象的集合:
all 获取页面所有元素对象
forms 获取页面所有表单对象
images 获取页面所有图片对象
links 获取所有超链接或area对象
具体的内容会在学习DOM时学习。
2. DOM
2.1. DOM简介
全称Document Object Model,即文档对象模型。
DOM描绘了一个层次化的树,允许开发人员添加、删除、修改页面的某一部分。
浏览器在解析HTML页面标记的时候,其实不是按照一行一行读取并解析的,
而是将HTML页面中的每一个标记按照顺序在内存中组建一颗DOM树,
组建好之后,按照树的结构将页面显示在浏览器的窗口中。
2.2. 节点层次
HTML网页是可以看做是一个树状的结构,如下: html |-- head | |-- title | |-- meta | ... |-- body | |-- div | |-- form | | |-- input | | |-- textarea ... ... ...
这是一颗树,是由多个节点(Node)组成的,节点的类型有很多种。
节点最多有一个父节点,可以有多个子节点。
HTML DOM 定义了访问和操作HTML文档的标准方法。
document
代表当前页面的整个文档树。
访问属性
all
forms
images
links
body
访问方法(最常用的DOM方法)
1 <html xmlns="http://www.w3.org/1999/xhtml"> 2 <head> 3 <script type="text/javascript"> 4 // 获取dom 树, 获取document 对象. 5 var dom = window.document; 6 // all 获取页面中所有的标签节点 ,注释和文档类型约束. 7 function testAll() { 8 var allArr = dom.all; 9 alert(allArr.length); 10 for (var i = 0; i < allArr.length; i++) { 11 //获取节点名称 12 alert(allArr[i].nodeName); 13 } 14 } 15 // anchors 获取页面中的所有的锚连接. 16 function testAnchors() { 17 var anArr = dom.anchors; 18 alert(anArr.length); 19 } 20 // froms 获取所有的form 表单对象 21 function testForms() { 22 var formArr = dom.forms; 23 alert(formArr.length); 24 alert(formArr[0].nodeName); 25 } 26 // images 27 function testImages() { 28 var imageArr = dom.images; 29 alert(imageArr.length); 30 } 31 // links 获取页面的超链接. 32 function testLinks() { 33 var linkArr = dom.links; 34 //alert(linkArr.length); 35 for (var i = 0; i < linkArr.length; i++) { 36 //alert(linkArr[i].nodeName); 37 } 38 for (var i in linkArr) { 39 alert(i); 40 } 41 } 42 //testLinks(); 43 // 获取页面的Body 44 var body = dom.body; 45 alert(body.nodeName); 46 </script> 47 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 48 <title>javascript</title> 49 </head> 50 <body onmousemove="test(this)"> 51 <img src="xxx" alt="这是一个美女"/> 52 <img src="xxx" alt="这是一个美女"/> 53 <img src="xxx" alt="这是一个美女"/> 54 <a href="http://www.baidu.com">百度一下</a> 55 <a href="http://www.google.com">百度两下</a> 56 <a href="http://www.baigu.com">百谷一下</a> 57 <a name="one"></a> 58 <a name="two"></a> 59 <form> 60 <label>姓名:</label><!--默认不写type 就是文本输入框--> 61 <input type="text"/> 62 </form> 63 </body> 64 </html>
获取节点对象案例
document.getElementById("html元素的id")
document.getElementsByTagName("标签名")
document.getElementsByName("html元素的name")
示例:
1,得到所有的div元素并显示信息(innerHTML)。
2,得到所有div元素中id为"test"的结果。
1 Var dom = window.document; 2 function testByTagName() { 3 var iptArr = dom.getElementsByTagName("input"); 4 for (var i = 0; i < iptArr.length; i++) { 5 alert(iptArr[i].value); 6 } 7 } 8 // window 对象提供了一个事件, onload 事件 onload(页面加载完毕执行该代码) 是一个事件, 给事件一个方法, 9 //window.onload = testByTagName; 10 //2,得到所有标签id为"username"的结果。获取旧value值并设置value值 11 function testById() { 12 var user = dom.getElementById("username"); 13 alert(user.value); 14 user.value = "rose"; 15 } 16 //testById(); 17 //3. 获取所有标签name 为like的元素.获取value值. 18 function testByName() { 19 var likeArr = dom.getElementsByName("like"); 20 for (var i = 0; i < likeArr.length; i++) { 21 alert(likeArr[i].value); 22 } 23 } 24 testByName();
案例
显示页面任意一个节点对象的所有子节点的nodeName、nodeType、nodeValue
属性操作练习
1,写一个form,其中有多个checkbox。
2,获取所有选中的数量。
3,实现全选与全不选的效果。
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>无标题文档</title> 6 7 <script type="text/javascript"> 8 function getSum() 9 { 10 /* 11 需求:通过点击总金额按钮获取被选中的条目的金额的总和,并将总金额显示在按钮右边。 12 思路: 13 1,先获取所有的checkbox对象。 14 2,对这些对象进行遍历。判断哪个对象被选中。 15 3,对被选中对象的金额进行累加。 16 4,显示在按钮右边。 17 */ 18 19 var items = document.getElementsByName("item"); 20 var sum = 0; 21 for(var x=0; x<items.length; x++) 22 { 23 if(items[x].checked) 24 { 25 sum += parseInt(items[x].value); 26 } 27 } 28 var str = sum+"元"; 29 document.getElementById("sumid").innerHTML = str.fontcolor('red'); 30 } 31 32 function checkAll(node) 33 { 34 /* 35 需求:通过全选checkbox,将其他条目都选中。 36 思路: 37 只要将全选checkbox的checked状态赋值给其他的item checked状态即可。 38 39 40 */ 41 //var allNode = document.getElementsByName("all")[index]; 42 43 var items = document.getElementsByName("item"); 44 for(var x=0; x<items.length; x++) 45 { 46 items[x].checked = node.checked; 47 } 48 } 49 </script> 50 </head> 51 52 <body> 53 54 55 <div>商品列表</div> 56 <input type="checkbox" name="all" onclick="checkAll(this)" /> 全选<br /> 57 <input type="checkbox" name="item" value="3000" />笔记本电脑3000元<br /> 58 <input type="checkbox" name="item" value="3000" />笔记本电脑3000元<br /> 59 <input type="checkbox" name="item" value="3000" />笔记本电脑3000元<br /> 60 <input type="checkbox" name="item" value="3000" />笔记本电脑3000元<br /> 61 <input type="checkbox" name="item" value="3000" />笔记本电脑3000元<br /> 62 <input type="checkbox" name="item" value="3000" />笔记本电脑3000元<br /> 63 <input type="checkbox" name="all" onclick="checkAll(this)" /> 全选<br /> 64 <input type="button" value="总金额:" onclick="getSum()" /><span id="sumid"></span> 65 66 67 </body> 68 </html>
通过节点关系查找节点
从一个节点出发开始查找:
parentNode 获取当前元素的父节点。
childNodes 获取当前元素的所有下一级子元素。
firstChild 获取当前节点的第一个子节点。
lastChild 获取当前节点的最后一个子节点。
nextSibling 获取当前节点的下一个节点。(兄节点)
previousSibling 获取当前节点的上一个节点。(弟节点)
示例1:
firstChild属性最普遍的用法是访问某个元素的文本:
var text=x.firstChild.nodeValue;
示例2:
parentNode 属性常被用来改变文档的结构。
假设您希望从文档中删除带有 id 为 "maindiv" 的节点:
var x=document.getElementById("maindiv");
x.parentNode.removeChild(x);
获取节点对象的信息
每个节点都包含的信息的,这些属性是: nodeType 节点类型 nodeName 节点名称 nodeValue 节点值 nodeType nodeType 属性可返回节点的类型。 --------------------------------- 元素类型 节点类型 ------------------ 元素 1 就是标签元素,例<div>..</div> 文本 3 标签元素中的文本 注释 8 表示为注释 nodeName nodeName 属性含有某个节点的名称。 -------------------------------- 元素节点的 nodeName 是标签名称 属性节点的 nodeName 是属性名称 文本节点的 nodeName 永远是 #text 文档节点的 nodeName 永远是 #document nodeValue 对于文本节点,nodeValue 属性是所包含的文本。 对于属性节点,nodeValue 属性是属性值。 对于注释节点,nodeValue 属性注释内容。 nodeValue 属性对于文档节点和元素节点是不可用的。
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <script type="text/javascript"> 5 //节点和节点之间的关系. 6 //获取dom树 7 var dom = window.document; 8 //获取指定id 的标签节点. 9 function test() { 10 var form = dom.getElementById("form1"); 11 //获取父节点. 12 //alert(form.parentNode.nodeName); 13 // 获取子节点(Node 包含 文本,注释,标签) 14 var childArr = form.childNodes; 15 //alert(childArr.length); 16 /* 17 for (var i = 0; i < childArr.length; i++) { 18 alert(childArr[i]); 19 } 20 */ 21 // 获取第一个孩子. 22 var first = form.firstChild; 23 //alert(first); 24 //最后一个孩子. 25 var last = form.lastChild; 26 //alert(last); 27 // 获取下兄弟(获取弟弟) 28 var sibling = form.nextSibling; 29 //alert(sibling.nodeName); 30 // 获取大哥 31 var previous = form.previousSibling; 32 alert(previous.nodeName); 33 } 34 test(); 35 </script> 36 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 37 38 <title>javascript</title> 39 </head> 40 <body onmousemove="test(this)"> 41 <a>哈哈</a> 42 <form id="form1"> 43 <label>姓名:</label> 44 <input type="text" /> 45 </form> 46 </body> 47 </html>
节点操作
1.1.1. 创建新节点
document.createElement("标签名") 创建新元素节点
elt.setAttribute("属性名", "属性值") 设置属性
elt.appendChild(e) 添加元素到elt中最后的位置
elt.insertBefore(new, child); 添加到elt中,child之前。
// 参数1:要插入的节点 参数
2:插入目标元素的位置
elt.removeChild(eChild) 删除指定的子节点
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <script> 5 /* 6 创建节点: 7 document.createElement("标签名") 创建新元素节点 8 elt.setAttribute("属性名", "属性值") 设置属性 9 添加节点到文档树上: 10 elt.appendChild(e) 添加元素到elt中最后的位置 把元素添加最后一个子节点的后面。 11 elt.insertBefore(new, child); 添加到elt中,child之前。 12 // 参数1:要插入的节点 参数2:插入目标元素的位置 13 14 */ 15 /* 16 function add(){ 17 // 18 var inputNode = document.createElement("input"); // 创建一个节点的对象 19 inputNode.setAttribute("type","file"); //给新节点设置type的属性值。 20 var body = document.getElementsByTagName("body")[0]; 21 body.appendChild(inputNode); //把新节点添加到body体中。 22 } 23 */ 24 var count = 1; 25 function add(){ 26 var trNode = document.createElement("tr"); 27 var tdNode = document.createElement("td"); 28 var inputNode = document.createElement("input"); 29 inputNode.setAttribute("type","button"); 30 inputNode.setAttribute("value",count+""); 31 count++; 32 tdNode.appendChild(inputNode); 33 trNode.appendChild(tdNode); 34 //trNode添加 到指定 的位置上。 35 var tbodyNode = document.getElementsByTagName("tbody")[0]; 36 //tableNode.appendChild(trNode); 37 var button1 = document.getElementById("b1"); 38 tbodyNode.insertBefore(trNode,button1); // 注意: 使用obj.insertBefore(o1,o2)这个方法的时候 39 //obj必须是o1,o2的直接父节点。 40 //alert(button1.nodeName+"~~"+trNode.nodeName+"~~"+tableNode.nodeName); 41 } 42 </script> 43 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 44 <title>无标题文档</title> 45 </head> 46 <body> 47 <table> 48 <tr> 49 <td> 50 <input type="button" value="0"> 51 </td> 52 </tr> 53 <tr id="b1"> 54 <td> 55 <input type="button" value="添加" onclick="add()"> 56 </td> 57 </tr> 58 </table> 59 60 61 62 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 63 <html xmlns="http://www.w3.org/1999/xhtml"> 64 <head> 65 <script> 66 function addFile(){ 67 var trNode = document.createElement("tr"); 68 var td1 = document.createElement("td"); 69 var td2 = document.createElement("td"); 70 td1.innerHTML="<input type='file'/>"; 71 td2.innerHTML="<a href='#' οnclick='deleteFile(this)'>删除附件</a>" 72 trNode.appendChild(td1); 73 trNode.appendChild(td2); 74 //把trNode添加 到添加按钮上面 75 var addButton = document.getElementById("addButton"); 76 var tbody = document.getElementsByTagName("tbody")[0]; 77 tbody.insertBefore(trNode,addButton); 78 } 79 80 81 function deleteFile(deleteNode){ 82 //找到要删除的tr a---->td---->tr 83 var trNode = deleteNode.parentNode.parentNode; //获取到了要删除的tr节点。 84 // 找 到trNode的父节点 85 var tbodyNode =document.getElementsByTagName("tbody")[0]; 86 tbodyNode.removeChild(trNode); 87 //trNode.removeNode(true); // removeNode() 在firefox上不 支持,在ie支持。 88 } 89 90 91 </script> 92 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 93 <title>无标题文档</title> 94 </head> 95 <body> 96 <table> 97 <tr> 98 <td><input type="file"></td> 99 <td><a href="#" onclick="deleteFile(this)">删除附件</a></td> 100 </tr> 101 <tr id="addButton"> 102 <td> 103 <input type="button" value="添加附件" onclick="addFile()"/> 104 </td> 105 </tr> 106 </table> 107 108 </body> 109 </html>
案例
- 生成二级城市联动菜单
-
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>无标题文档</title> 6 <style type="text/css"> 7 select{ 8 width:100px; 9 } 10 </style> 11 <script type="text/javascript"> 12 function selcity() 13 { 14 //定义数据对应关系 15 //城市有很多,所以通过数组存储。每一个省对应一个城市数组,怎么建立对应关系呢? 16 //每一个省都有自己的角标。通过角标和数组建立对应关系,这就是二维数组。 17 18 var arr = [['--选择城市--'],['海淀区','朝阳区','东城区','西城区'] 19 ,['沈阳','大连','鞍山','抚顺'] 20 ,['济南','青岛','烟台','威海'] 21 ,['石家庄','廊坊','唐山','秦皇岛']]; 22 23 //获取选择的省的角标。 24 var selNode = document.getElementById("selid"); 25 var index = selNode.selectedIndex; 26 27 var cities = arr[index]; 28 29 var subSelNode = document.getElementById("subselid"); 30 31 //有更简单清除方式,只要改变下拉菜单的长度即可。 32 subSelNode.options.length = 0; 33 /* 34 //清除上一次选择的子菜单内容。 35 for(var x=1; x<subSelNode.options.length;) 36 { 37 38 alert(subSelNode.options.length+"..."+subSelNode.options[x].innerHTML+"..."+x); 39 subSelNode.removeChild(subSelNode.options[x]); 40 } 41 */ 42 43 44 45 for(var x=0; x<cities.length; x++) 46 { 47 var optNode = document.createElement("option"); 48 49 optNode.innerHTML = cities[x]; 50 51 subselid.appendChild(optNode); 52 } 53 } 54 </script> 55 </head> 56 <body> 57 <select id="selid" onchange="selcity()"> 58 <option>--选择省市--</option> 59 <option>北京市</option> 60 <option>辽宁省</option> 61 <option>山东省</option> 62 <option>河北省</option> 63 </select> 64 <select id="subselid"> 65 <option>--选择城市--</option> 66 </select> 67 </body> 68 </html>
- 2.动态生成年、月、日字段
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <script type="text/javascript"> 5 /** 6 * @author Administrator 7 */ 8 //通过js创建年,月,日 9 //获取Dom 10 var dom = window.document; 11 function myYear() { 12 //获取年的select 13 var year = dom.getElementById("year"); 14 //创建年 15 var minYear = 1900; 16 var maxYear = new Date().getFullYear(); 17 for (var i = minYear; i <= maxYear; i++) { 18 //创建Option 19 var opt = dom.createElement("option"); 20 //设置Option,标签体. 21 opt.innerHTML = i; 22 opt.value = i; 23 //挂载节点 24 year.appendChild(opt); 25 } 26 } 27 function myMonth() { 28 var month = dom.getElementById("month"); 29 //创建月 30 for (var i = 1; i <= 12; i++) { 31 //创建Option 32 var opt = dom.createElement("option"); 33 //设置Option,标签体. 34 if (i < 10) { 35 opt.innerHTML = "0" + i; 36 opt.value = i; 37 } else { 38 opt.innerHTML = i; 39 opt.value = i; 40 } 41 month.appendChild(opt); 42 } 43 month.onchange = myDay; 44 } 45 function myDay() { 46 clear(); 47 //创建天 48 // 大月1 3 5 7 8 10 12 ,小月4 6 9 11 闰年2月 非闰年的2月 49 //获取年 50 var year = dom.getElementById("year").value; 51 //获取月 52 var month = dom.getElementById("month").value; 53 if (year == "") { 54 alert("请选择年"); 55 return; 56 } 57 if (month == "") { 58 alert("请选择月"); 59 return; 60 } 61 //获取天select 62 var day = dom.getElementById("day"); 63 //一个月至少有28天. 64 for (var i = 1; i <= 28; i++) { 65 var opt = dom.createElement("option"); 66 if (i < 10) { 67 opt.innerHTML = "0" + i; 68 opt.value = "0" + i; 69 } else { 70 opt.innerHTML = i; 71 opt.value = i; 72 } 73 day.appendChild(opt); 74 } 75 //大月 76 var isBigMonth = month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12; 77 //小月 78 var isSmallMonth = month == 4 || month == 6 || month == 9 || month == 11; 79 //闰年 可以整除4但不能整除100 或者 年份可以整除400. 80 var isLeapYear = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; 81 //判断,如果是大月,添加3天 82 if (isBigMonth) { 83 //添加3天 84 for (var i = 29; i <= 31; i++) { 85 var opt = dom.createElement("option"); 86 opt.innerHTML = i; 87 opt.value = i; 88 day.appendChild(opt); 89 } 90 } else if (isSmallMonth) { 91 //添加2天 92 for (var i = 29; i <= 30; i++) { 93 var opt = dom.createElement("option"); 94 opt.innerHTML = i; 95 opt.value = i; 96 day.appendChild(opt); 97 } 98 } else if (isLeapYear) { 99 //如果是闰年,添加一天.专门处理闰年2月. 100 var opt = dom.createElement("option"); 101 opt.innerHTML = 29; 102 opt.value = 29; 103 day.appendChild(opt); 104 } 105 } 106 function clear() { 107 var day = dom.getElementById("day"); 108 var optArr = day.childNodes; 109 for (var i = optArr.length - 1; i >= 0; i--) { 110 day.removeChild(optArr[i]); 111 } 112 } 113 function getBirthday() { 114 //获取Dom 115 var dom = window.document; 116 myYear(); 117 myMonth(); 118 } 119 getBirthday(); 120 </script> 121 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 122 <title>javascript</title> 123 </head> 124 <body> 125 生日: 126 <select id="year"> 127 <option>年</option> 128 </select> 129 <select id="month"> 130 <option>月</option> 131 </select> 132 <select id="day"> 133 <option>日</option> 134 </select> 135 136 </body> 137 </html>
3生产一个验证码
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <script type="text/javascript"> 5 /** 6 * @author Administrator 7 */ 8 //验证码 ,4位的,由字符,数字组成. 9 function createCode() { 10 var datas = ["A", "B", "C", "D", "E", "F", "G", "H", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; 11 //随机的从数组中取出4个元素. 12 var mess = ""; 13 var index = 0; 14 for (var i = 0; i < 4; i++) { 15 //生成随机数.而且是在数组的长度范围内. 16 //0-9之间的随机数. Math.floor(Math.random()*10) 17 //0到数组长度(不包含)之间的浮点数.,向下取整, 18 var index = Math.floor(Math.random() * datas.length); 19 mess += datas[index]; 20 }; 21 // 22 var codeSpan = window.document.getElementById("codeSpan"); 23 codeSpan.style.color = "red"; 24 codeSpan.style.fontSize = "20px"; 25 codeSpan.style.background = "gray"; 26 codeSpan.style.fontWeight = "900"; 27 codeSpan.style.fontStyle = "italic"; 28 codeSpan.style.textDecoration = "line-through"; 29 codeSpan.innerHTML = mess; 30 codeSpan.value = mess; 31 } 32 createCode(); 33 </script> 34 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 35 <title>javascript</title> 36 </head> 37 <body> 38 <span id="codeSpan"></span><a href="#" onclick="createCode()">看不清楚</a> 39 40 </body> 41 </html>
正则表达式
位置:
^ 开头
$ 结尾
次数:
* 0或多个
+ 1或多个
? 0或1个
{n} 就是n个
{n,} 至少n个
{n,m} 最少n个,最多m个
通配符:
\d 任意数字
\D 任意非数字
\s 任意空白
\S 任意非空白
. 任意字符(除'\n'外)
组合:
[a-z]
[0-9]
等
组:
(正则) 匹配括号中正则表达式对应的结果,并暂存这个结果。
(?:正则) 匹配括号中正则表达式对应的结果,但不暂存这个结果。
\数字 使用第n个组匹配的结果
使用正则的工具(RegExp类与相关方法)
创建:
// 方式一
var regex = new RegExp("正则表达式", "标志");
// 方式二
var regex = /正则表达式/标志
参数说明:
正则表达式:
参见上面的规则
标志:
g (全文查找出现的所有 pattern)
i (忽略大小写)
m (多行查找)
方法:
Regexp.test( str )
String.replace( regex, str )
练习:校验表单
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <script> 5 6 //用户名的规则: 第一位是字母,只有由数字与字母 组成,6位。 7 function checkName(){ 8 //获取到了用户名的值 9 var userName = document.getElementById("username").value; 10 var userSpan = document.getElementById("userId"); 11 var reg = /^[a-z][a-z0-9]{5}$/i; 12 if(reg.test(userName)){ 13 //符合规则 14 userSpan.innerHTML="正确".fontcolor("green"); 15 return true; 16 }else{ 17 //不符合规则 18 userSpan.innerHTML="错误".fontcolor("red"); 19 return false; 20 } 21 } 22 23 24 //校验密码 6位 25 function checkPass(){ 26 var password = document.getElementById("pwd").value; 27 if(password.length>0){ 28 var reg = /^\w{6}$/; 29 var passSPan = document.getElementById("passId"); 30 if(reg.test(password)){ 31 //符合规则 32 passSPan.innerHTML="正确".fontcolor("green"); 33 return true; 34 }else{ 35 //不符合规则 36 passSPan.innerHTML="错误".fontcolor("red"); 37 return false; 38 } 39 } 40 41 } 42 43 44 //检验密码是否正确 45 function ensurepass(){ 46 var password1 = document.getElementById("pwd").value; //第一次 输入的密码 47 var password2 = document.getElementById("ensurepwd").value; 48 if(password2.length>0){ 49 var enSpan = document.getElementById("ensure"); 50 if(password1.valueOf()==password2.valueOf()){ 51 enSpan.innerHTML="正确".fontcolor("green"); 52 return true; 53 }else{ 54 enSpan.innerHTML="错误".fontcolor("red"); 55 return false; 56 } 57 } 58 } 59 60 61 //校验邮箱 62 function checkEmail(){ 63 var email = document.getElementById("email").value; 64 var reg = /^[a-z0-9]\w+@[a-z0-9]{2,3}(\.[a-z]{2,3}){1,2}$/i; // .com .com.cn 65 var emailspan = document.getElementById("emailspan"); 66 alert(reg.test(email)); 67 if(reg.test(email)){ 68 //符合规则 69 emailspan.innerHTML="正确".fontcolor("green"); 70 71 return true; 72 }else{ 73 //不符合规则 74 emailspan.innerHTML="错误".fontcolor("red"); 75 return false; 76 } 77 } 78 79 80 //校验兴趣爱好: 至少要算中其中 的 一个。 81 function checkHoby(){ 82 var likes = document.getElementsByName("like"); 83 var hobySpan =document.getElementById("hobbySpan") 84 var flag = false; 85 for(var i = 0 ; i<likes.length ; i++){ 86 if(likes[i].checked){ 87 flag =true; 88 break; 89 } 90 } 91 92 if(flag){ 93 //符合规则 94 hobySpan.innerHTML="正确".fontcolor("green"); 95 return true; 96 }else{ 97 //不符合规则 98 hobySpan.innerHTML="错误".fontcolor("red"); 99 return false; 100 } 101 } 102 103 104 105 //总体校验表单是否可以提交了 如果返回的true表单才可以提交。 上面的表单项必须要每个都填写正确。 106 function checkForm(){ 107 var userName = checkName(); 108 var pass = checkPass(); 109 var ensure = ensurepass(); 110 var email = checkEmail(); 111 var hoby = checkHoby(); 112 if(userName&&pass&&ensure&&email&&hoby){ 113 return true; 114 }else{ 115 return false; 116 } 117 118 } 119 120 121 122 123 124 125 126 </script> 127 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 128 <title>正则表达式</title> 129 </head> 130 <body> 131 <form action="success.html" method="get" onsubmit="return checkForm()"> <!--如果表单提交时候触发的方法返回是false,那么该表单不允许提交,如果返回的是true允许提交 --> 132 <table border="1px" width="50%" align="center" cellspacing="0px" cellpadding="3px"> 133 <tr> 134 <td width="25%">姓名:</td> 135 <td> 136 <input type="text" name="username" id="username" onblur="checkName()"/> 137 <span id="userId"></span> 138 </td> 139 </tr> 140 <tr> 141 <td >密码:</td><td> 142 <input type="password" name="pwd" id="pwd" onblur="checkPass()"/> 143 <span id="passId"></span> 144 </td> 145 </tr> 146 <tr> 147 <td>确认密码:</td><td> 148 <input type="password" name="ensurepwd" id="ensurepwd" onblur="ensurepass()" /> <span id="ensure"></span> 149 </td> 150 </tr> 151 <tr> 152 <td>邮箱</td><td> 153 <input type="text" name="email" id="email" onblur="checkEmail()"/> 154 <span id="emailspan"></span> 155 156 </td> 157 </tr> 158 <tr> 159 <td>性别</td><td> 160 <input type="radio" checked="ture" name="gender" id="male" value="male"/> 161 男 162 <input type="radio" name="gender" value="female"/> 163 164 女</td> 165 </tr> 166 167 <tr> 168 <td>爱好:</td><td> 169 <input type="checkbox" checked="checked" name="like" /> 170 eat 171 <input type="checkbox" name="like" /> 172 sleep 173 <input type="checkbox" name="like"/> 174 play 175 <span id="hobbySpan"></span> 176 </td> 177 </tr> 178 <tr> 179 <td>城市</td><td> 180 <select name="city" id="city"> 181 <option value=""> 请选择</option> 182 <option value="bj"> 北京 </option> 183 <option value="gz"> 广州 </option> 184 <option value="sh"> 上海 </option> 185 </select> 186 187 </td> 188 </tr> 189 <tr> 190 <td>自我介绍</td><td> <textarea cols="15" rows="5" name="myInfo" id="myInfo"></textarea></td> 191 </tr> 192 <tr align="center"> 193 <td colspan="2"><!--提交按钮--> 194 <input type="submit"/> 195 </td> 196 </tr> 197 </table> 198 </form> 199 </body> 200 </html>
posted on 2016-11-09 12:20 Michael2397 阅读(...) 评论(...) 编辑 收藏