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()  将窗口左上角的屏幕位置移动到指定的 xy 位置。

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()   重新装入当前页面

1.3.2. 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>");

1.3.3. 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方法)

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<script type="text/javascript">

// 获取dom 树, 获取document 对象.

var dom = window.document;

// all 获取页面中所有的标签节点 ,注释和文档类型约束.

function testAll() {

var allArr = dom.all;

alert(allArr.length);

for (var i = 0; i < allArr.length; i++) {

//获取节点名称

alert(allArr[i].nodeName);

}

}

// anchors 获取页面中的所有的锚连接.

function testAnchors() {

var anArr = dom.anchors;

alert(anArr.length);

}

// froms  获取所有的form 表单对象

function testForms() {

var formArr = dom.forms;

alert(formArr.length);

alert(formArr[0].nodeName);

}

// images

function testImages() {

var imageArr = dom.images;

alert(imageArr.length);

}

// links  获取页面的超链接.

function testLinks() {

var linkArr = dom.links;

//alert(linkArr.length);

for (var i = 0; i < linkArr.length; i++) {

//alert(linkArr[i].nodeName);

}

for (var i in linkArr) {

alert(i);

}

}

//testLinks();

// 获取页面的Body

var body = dom.body;

alert(body.nodeName);

</script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>javascript</title>

</head>

<body onmousemove="test(this)">

<img src="xxx" alt="这是一个美女"/>

<img src="xxx" alt="这是一个美女"/>

<img src="xxx" alt="这是一个美女"/>

<a href="http://www.baidu.com">百度一下</a>

<a href="http://www.google.com">百度两下</a>

<a href="http://www.baigu.com">百谷一下</a>

<a name="one"></a>

<a name="two"></a>

<form>

<label>姓名:</label><!--默认不写type 就是文本输入框-->

<input  type="text"/>

</form>

</body>

</html>

2.3. 获取节点对象案例

document.getElementById("html元素的id")

document.getElementsByTagName("标签名")

document.getElementsByName("html元素的name")

示例:

1,得到所有的div元素并显示信息(innerHTML)。

2,得到所有div元素中id为"test"的结果。

Var dom = window.document;

function testByTagName() {

var iptArr = dom.getElementsByTagName("input");

for (var i = 0; i < iptArr.length; i++) {

alert(iptArr[i].value);

}

}

// window 对象提供了一个事件, onload 事件 onload(页面加载完毕执行该代码) 是一个事件, 给事件一个方法,

//window.onload = testByTagName;

//2,得到所有标签id为"username"的结果。获取旧value值并设置value值

function testById() {

var user = dom.getElementById("username");

alert(user.value);

user.value = "rose";

}

//testById();

//3. 获取所有标签name 为like的元素.获取value值.

function testByName() {

var likeArr = dom.getElementsByName("like");

for (var i = 0; i < likeArr.length; i++) {

alert(likeArr[i].value);

}

}

testByName();

2.3.1. 案例

显示页面任意一个节点对象的所有子节点的nodeName、nodeType、nodeValue

2.3.2. 属性操作练习

1,写一个form,其中有多个checkbox。

2,获取所有选中的数量。

3,实现全选与全不选的效果。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>无标题文档</title>

<script type="text/javascript">

function getSum()

{

/*

需求:通过点击总金额按钮获取被选中的条目的金额的总和,并将总金额显示在按钮右边。

思路:

1,先获取所有的checkbox对象。

2,对这些对象进行遍历。判断哪个对象被选中。

3,对被选中对象的金额进行累加。

4,显示在按钮右边。

*/

var items = document.getElementsByName("item");

var sum = 0;

for(var x=0; x<items.length; x++)

{

if(items[x].checked)

{

sum += parseInt(items[x].value);

}

}

var str = sum+"元";

document.getElementById("sumid").innerHTML = str.fontcolor('red');

}

function checkAll(node)

{

/*

需求:通过全选checkbox,将其他条目都选中。

思路:

只要将全选checkbox的checked状态赋值给其他的item checked状态即可。

*/

//var allNode = document.getElementsByName("all")[index];

var items = document.getElementsByName("item");

for(var x=0; x<items.length; x++)

{

items[x].checked = node.checked;

}

}

</script>

</head>

<body>

<div>商品列表</div>

<input type="checkbox" name="all" onclick="checkAll(this)"  /> 全选<br />

<input type="checkbox" name="item" value="3000" />笔记本电脑3000元<br />

<input type="checkbox" name="item" value="3000"  />笔记本电脑3000元<br />

<input type="checkbox" name="item" value="3000"  />笔记本电脑3000元<br />

<input type="checkbox" name="item" value="3000"  />笔记本电脑3000元<br />

<input type="checkbox" name="item" value="3000"  />笔记本电脑3000元<br />

<input type="checkbox" name="item" value="3000"  />笔记本电脑3000元<br />

<input type="checkbox" name="all" onclick="checkAll(this)"  /> 全选<br />

<input type="button" value="总金额:" onclick="getSum()" /><span id="sumid"></span>

</body>

</html>

2.4. 通过节点关系查找节点

从一个节点出发开始查找:

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);

2.4.1. 获取节点对象的信息

每个节点都包含的信息的,这些属性是:

nodeType   节点类型

nodeName   节点名称

nodeValue  节点值

nodeType

nodeType 属性可返回节点的类型。

---------------------------------

元素类型 节点类型

------------------

元素      1      就是标签元素,例<div>..</div>

文本      3      标签元素中的文本

注释      8       表示为注释

nodeName

nodeName 属性含有某个节点的名称。

--------------------------------

元素节点的 nodeName 是标签名称

属性节点的 nodeName 是属性名称

文本节点的 nodeName 永远是 #text

文档节点的 nodeName 永远是 #document

nodeValue

对于文本节点,nodeValue 属性是所包含的文本。

对于属性节点,nodeValue 属性是属性值。

对于注释节点,nodeValue 属性注释内容。

nodeValue 属性对于文档节点和元素节点是不可用的。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<script type="text/javascript">

//节点和节点之间的关系.

//获取dom树

var dom = window.document;

//获取指定id 的标签节点.

function test() {

var form = dom.getElementById("form1");

//获取父节点.

//alert(form.parentNode.nodeName);

// 获取子节点(Node 包含 文本,注释,标签)

var childArr = form.childNodes;

//alert(childArr.length);

/*

for (var i = 0; i < childArr.length; i++) {

alert(childArr[i]);

}

*/

// 获取第一个孩子.

var first = form.firstChild;

//alert(first);

//最后一个孩子.

var last = form.lastChild;

//alert(last);

// 获取下兄弟(获取弟弟)

var sibling = form.nextSibling;

//alert(sibling.nodeName);

// 获取大哥

var previous = form.previousSibling;

alert(previous.nodeName);

}

test();

</script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>javascript</title>

</head>

<body onmousemove="test(this)">

<a>哈哈</a>

<form id="form1">

<label>姓名:</label>

<input type="text" />

</form>

</body>

</html>

2.5. 节点操作

2.5.1. 创建新节点

document.createElement("标签名")    创建新元素节点

elt.setAttribute("属性名", "属性值") 设置属性

elt.appendChild(e)                     添加元素到elt中最后的位置

elt.insertBefore(new, child);          添加到elt中,child之前。

// 参数1:要插入的节点  参数

2:插入目标元素的位置

elt.removeChild(eChild)                删除指定的子节点

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<script>

/*

创建节点:

document.createElement("标签名")    创建新元素节点

elt.setAttribute("属性名", "属性值") 设置属性

添加节点到文档树上:

elt.appendChild(e)                     添加元素到elt中最后的位置  把元素添加最后一个子节点的后面。

elt.insertBefore(new, child);          添加到elt中,child之前。

// 参数1:要插入的节点  参数2:插入目标元素的位置

*/

/*

function add(){

//

var inputNode = document.createElement("input"); // 创建一个节点的对象

inputNode.setAttribute("type","file"); //给新节点设置type的属性值。

var body = document.getElementsByTagName("body")[0];

body.appendChild(inputNode);    //把新节点添加到body体中。

}

*/

var count = 1;

function add(){

var trNode  = document.createElement("tr");

var tdNode  = document.createElement("td");

var inputNode  = document.createElement("input");

inputNode.setAttribute("type","button");

inputNode.setAttribute("value",count+"");

count++;

tdNode.appendChild(inputNode);

trNode.appendChild(tdNode);

//trNode添加 到指定 的位置上。

var tbodyNode = document.getElementsByTagName("tbody")[0];

//tableNode.appendChild(trNode);

var button1 = document.getElementById("b1");

tbodyNode.insertBefore(trNode,button1); // 注意: 使用obj.insertBefore(o1,o2)这个方法的时候

//obj必须是o1,o2的直接父节点。

//alert(button1.nodeName+"~~"+trNode.nodeName+"~~"+tableNode.nodeName);

}

</script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>无标题文档</title>

</head>

<body>

<table>

<tr>

<td>

<input type="button" value="0">

</td>

</tr>

<tr id="b1">

<td>

<input type="button" value="添加" onclick="add()">

</td>

</tr>

</table>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<script>

function addFile(){

var trNode = document.createElement("tr");

var td1  = document.createElement("td");

var td2  = document.createElement("td");

td1.innerHTML="<input type='file'/>";

td2.innerHTML="<a href='#' onclick='deleteFile(this)'>删除附件</a>"

trNode.appendChild(td1);

trNode.appendChild(td2);

//把trNode添加 到添加按钮上面

var addButton = document.getElementById("addButton");

var tbody = document.getElementsByTagName("tbody")[0];

tbody.insertBefore(trNode,addButton);

}

function deleteFile(deleteNode){

//找到要删除的tr  a---->td---->tr

var trNode  = deleteNode.parentNode.parentNode;  //获取到了要删除的tr节点。

// 找 到trNode的父节点

var tbodyNode  =document.getElementsByTagName("tbody")[0];

tbodyNode.removeChild(trNode);

//trNode.removeNode(true); // removeNode() 在firefox上不 支持,在ie支持。

}

</script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>无标题文档</title>

</head>

<body>

<table>

<tr>

<td><input type="file"></td>

<td><a  href="#" onclick="deleteFile(this)">删除附件</a></td>

</tr>

<tr id="addButton">

<td>

<input type="button" value="添加附件"  onclick="addFile()"/>

</td>

</tr>

</table>

</body>

</html>

2.5.2. 案例

  1. 生成二级城市联动菜单

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>无标题文档</title>

<style type="text/css">

select{

width:100px;

}

</style>

<script type="text/javascript">

function selcity()

{

//定义数据对应关系

//城市有很多,所以通过数组存储。每一个省对应一个城市数组,怎么建立对应关系呢?

//每一个省都有自己的角标。通过角标和数组建立对应关系,这就是二维数组。

var arr = [['--选择城市--'],['海淀区','朝阳区','东城区','西城区']

,['沈阳','大连','鞍山','抚顺']

,['济南','青岛','烟台','威海']

,['石家庄','廊坊','唐山','秦皇岛']];

//获取选择的省的角标。

var selNode = document.getElementById("selid");

var index = selNode.selectedIndex;

var cities = arr[index];

var subSelNode = document.getElementById("subselid");

//有更简单清除方式,只要改变下拉菜单的长度即可。

subSelNode.options.length = 0;

/*

//清除上一次选择的子菜单内容。

for(var x=1; x<subSelNode.options.length;)

{

alert(subSelNode.options.length+"..."+subSelNode.options[x].innerHTML+"..."+x);

subSelNode.removeChild(subSelNode.options[x]);

}

*/

for(var x=0; x<cities.length; x++)

{

var optNode = document.createElement("option");

optNode.innerHTML = cities[x];

subselid.appendChild(optNode);

}

}

</script>

</head>

<body>

<select id="selid" onchange="selcity()">

<option>--选择省市--</option>

<option>北京市</option>

<option>辽宁省</option>

<option>山东省</option>

<option>河北省</option>

</select>

<select id="subselid">

<option>--选择城市--</option>

</select>

</body>

</html>

2.动态生成年、月、日字段

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<script type="text/javascript">

/**

* @author Administrator

*/

//通过js创建年,月,日

//获取Dom

var dom = window.document;

function myYear() {

//获取年的select

var year = dom.getElementById("year");

//创建年

var minYear = 1900;

var maxYear = new Date().getFullYear();

for (var i = minYear; i <= maxYear; i++) {

//创建Option

var opt = dom.createElement("option");

//设置Option,标签体.

opt.innerHTML = i;

opt.value = i;

//挂载节点

year.appendChild(opt);

}

}

function myMonth() {

var month = dom.getElementById("month");

//创建月

for (var i = 1; i <= 12; i++) {

//创建Option

var opt = dom.createElement("option");

//设置Option,标签体.

if (i < 10) {

opt.innerHTML = "0" + i;

opt.value = i;

} else {

opt.innerHTML = i;

opt.value = i;

}

month.appendChild(opt);

}

month.onchange = myDay;

}

function myDay() {

clear();

//创建天

// 大月1 3 5 7 8 10 12 ,小月4 6 9 11    闰年2月 非闰年的2月

//获取年

var year = dom.getElementById("year").value;

//获取月

var month = dom.getElementById("month").value;

if (year == "") {

alert("请选择年");

return;

}

if (month == "") {

alert("请选择月");

return;

}

//获取天select

var day = dom.getElementById("day");

//一个月至少有28天.

for (var i = 1; i <= 28; i++) {

var opt = dom.createElement("option");

if (i < 10) {

opt.innerHTML = "0" + i;

opt.value = "0" + i;

} else {

opt.innerHTML = i;

opt.value = i;

}

day.appendChild(opt);

}

//大月

var isBigMonth = month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12;

//小月

var isSmallMonth = month == 4 || month == 6 || month == 9 || month == 11;

//闰年    可以整除4但不能整除100 或者 年份可以整除400.

var isLeapYear = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;

//判断,如果是大月,添加3天

if (isBigMonth) {

//添加3天

for (var i = 29; i <= 31; i++) {

var opt = dom.createElement("option");

opt.innerHTML = i;

opt.value = i;

day.appendChild(opt);

}

} else if (isSmallMonth) {

//添加2天

for (var i = 29; i <= 30; i++) {

var opt = dom.createElement("option");

opt.innerHTML = i;

opt.value = i;

day.appendChild(opt);

}

} else if (isLeapYear) {

//如果是闰年,添加一天.专门处理闰年2月.

var opt = dom.createElement("option");

opt.innerHTML = 29;

opt.value = 29;

day.appendChild(opt);

}

}

function clear() {

var day = dom.getElementById("day");

var optArr = day.childNodes;

for (var i = optArr.length - 1; i >= 0; i--) {

day.removeChild(optArr[i]);

}

}

function getBirthday() {

//获取Dom

var dom = window.document;

myYear();

myMonth();

}

getBirthday();

</script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>javascript</title>

</head>

<body>

生日:

<select id="year">

<option>年</option>

</select>

<select id="month">

<option>月</option>

</select>

<select id="day">

<option>日</option>

</select>

</body>

</html>

  1. 生产一个验证码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<script type="text/javascript">

/**

* @author Administrator

*/

//验证码  ,4位的,由字符,数字组成.

function createCode() {

var datas = ["A", "B", "C", "D", "E", "F", "G", "H", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];

//随机的从数组中取出4个元素.

var mess = "";

var index = 0;

for (var i = 0; i < 4; i++) {

//生成随机数.而且是在数组的长度范围内.

//0-9之间的随机数. Math.floor(Math.random()*10)

//0到数组长度(不包含)之间的浮点数.,向下取整,

var index = Math.floor(Math.random() * datas.length);

mess += datas[index];

};

//

var codeSpan = window.document.getElementById("codeSpan");

codeSpan.style.color = "red";

codeSpan.style.fontSize = "20px";

codeSpan.style.background = "gray";

codeSpan.style.fontWeight = "900";

codeSpan.style.fontStyle = "italic";

codeSpan.style.textDecoration = "line-through";

codeSpan.innerHTML = mess;

codeSpan.value = mess;

}

createCode();

</script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>javascript</title>

</head>

<body>

<span id="codeSpan"></span><a href="#" onclick="createCode()">看不清楚</a>

</body>

</html>

3.    正则表达式

位置:

^      开头

$      结尾

次数:

*      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 )

练习:校验表单

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<script>

//用户名的规则: 第一位是字母,只有由数字与字母 组成,6位。

function checkName(){

//获取到了用户名的值

var userName = document.getElementById("username").value;

var userSpan = document.getElementById("userId");

var reg = /^[a-z][a-z0-9]{5}$/i;

if(reg.test(userName)){

//符合规则

userSpan.innerHTML="正确".fontcolor("green");

return true;

}else{

//不符合规则

userSpan.innerHTML="错误".fontcolor("red");

return false;

}

}

//校验密码  6位

function checkPass(){

var  password  = document.getElementById("pwd").value;

if(password.length>0){

var reg = /^\w{6}$/;

var passSPan = document.getElementById("passId");

if(reg.test(password)){

//符合规则

passSPan.innerHTML="正确".fontcolor("green");

return true;

}else{

//不符合规则

passSPan.innerHTML="错误".fontcolor("red");

return false;

}

}

}

//检验密码是否正确

function ensurepass(){

var  password1 = document.getElementById("pwd").value; //第一次 输入的密码

var password2 = document.getElementById("ensurepwd").value;

if(password2.length>0){

var enSpan  = document.getElementById("ensure");

if(password1.valueOf()==password2.valueOf()){

enSpan.innerHTML="正确".fontcolor("green");

return true;

}else{

enSpan.innerHTML="错误".fontcolor("red");

return false;

}

}

}

//校验邮箱

function checkEmail(){

var  email  = document.getElementById("email").value;

var reg = /^[a-z0-9]\w+@[a-z0-9]{2,3}(\.[a-z]{2,3}){1,2}$/i;  // .com .com.cn

var emailspan = document.getElementById("emailspan");

alert(reg.test(email));

if(reg.test(email)){

//符合规则

emailspan.innerHTML="正确".fontcolor("green");

return true;

}else{

//不符合规则

emailspan.innerHTML="错误".fontcolor("red");

return false;

}

}

//校验兴趣爱好: 至少要算中其中 的 一个。

function checkHoby(){

var likes  = document.getElementsByName("like");

var hobySpan =document.getElementById("hobbySpan")

var flag  = false;

for(var i =  0 ; i<likes.length ; i++){

if(likes[i].checked){

flag =true;

break;

}

}

if(flag){

//符合规则

hobySpan.innerHTML="正确".fontcolor("green");

return true;

}else{

//不符合规则

hobySpan.innerHTML="错误".fontcolor("red");

return false;

}

}

//总体校验表单是否可以提交了  如果返回的true表单才可以提交。 上面的表单项必须要每个都填写正确。

function checkForm(){

var userName = checkName();

var pass  = checkPass();

var ensure  = ensurepass();

var email = checkEmail();

var hoby = checkHoby();

if(userName&&pass&&ensure&&email&&hoby){

return true;

}else{

return false;

}

}

</script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>正则表达式</title>

</head>

<body>

<form action="success.html" method="get" onsubmit="return checkForm()"> <!--如果表单提交时候触发的方法返回是false,那么该表单不允许提交,如果返回的是true允许提交 -->

<table border="1px" width="50%" align="center" cellspacing="0px" cellpadding="3px">

<tr>

<td width="25%">姓名:</td>

<td>

<input type="text" name="username" id="username" onblur="checkName()"/>

<span id="userId"></span>

</td>

</tr>

<tr>

<td >密码:</td><td>

<input type="password"  name="pwd" id="pwd" onblur="checkPass()"/>

<span id="passId"></span>

</td>

</tr>

<tr>

<td>确认密码:</td><td>

<input type="password" name="ensurepwd" id="ensurepwd" onblur="ensurepass()" />                    <span id="ensure"></span>

</td>

</tr>

<tr>

<td>邮箱</td><td>

<input type="text" name="email" id="email" onblur="checkEmail()"/>

<span id="emailspan"></span>

</td>

</tr>

<tr>

<td>性别</td><td>

<input type="radio" checked="ture" name="gender" id="male" value="male"/>

<input type="radio" name="gender" value="female"/>

女</td>

</tr>

<tr>

<td>爱好:</td><td>

<input type="checkbox" checked="checked"  name="like" />

eat

<input type="checkbox" name="like" />

sleep

<input type="checkbox" name="like"/>

play

<span id="hobbySpan"></span>

</td>

</tr>

<tr>

<td>城市</td><td>

<select name="city" id="city">

<option value=""> 请选择</option>

<option value="bj"> 北京 </option>

<option value="gz"> 广州 </option>

<option value="sh"> 上海 </option>

</select>

</td>

</tr>

<tr>

<td>自我介绍</td><td>               <textarea cols="15" rows="5"  name="myInfo" id="myInfo"></textarea></td>

</tr>

<tr align="center">

<td colspan="2"><!--提交按钮-->

<input type="submit"/>

</td>

</tr>

</table>

</form>

</body>

</html>

4、BOM编程/正则表达式的更多相关文章

  1. 4 BOM编程

    4 BOM编程 编程基础 全称 Browser Object Model,浏览器对象模型. JavaScript是由浏览器中内置的javascript脚本解释器程序来执行javascript脚本语言的 ...

  2. javascript bom 编程

     javascript bom  编程 BOM: 浏览器对象模型 DOM Window  :窗口Window Document 属性:     status :状态栏     self:自己    ...

  3. JavaScript的BOM编程,事件-第4章

    目标 BOM编程 window和document对象 window对象的属性和方法 document对象的属性和方法 JavaScript中对象的分类 浏览器对象:window对象 window对象, ...

  4. BOM编程

    1 BOM编程 1.1 入门 BOM就是浏览器对象模型编程,通过javascript引擎提供的四个浏览器对象,操作浏览器,这叫BOM编程 1.2 window对象(重点) window代表的是一个窗口 ...

  5. Python高级编程–正则表达式(习题)

    原文:http://start2join.me/python-regex-answer-20141030/ ############################################## ...

  6. linux笔记:shell编程-正则表达式

    正则表达式与通配符(正则表达式匹配字符串,是包含匹配:通配符匹配文件名,是完全匹配.): 基础正则表达式: 正则表达式示例:

  7. [shell编程]正则表达式

    如果在shell脚本中处理数据文件,那么我们就必须熟悉正则表达式.正则表达式是用来过滤数据流中文本的模式模板,模式由标准文本字符和特殊字符组成.正则表达式用特殊字符来匹配一系列一个或多个字符,要想掌握 ...

  8. c#基础语言编程-正则表达式应用

    引言 在不同语言中虽正则表达式一样,但应用函数还是有所区别,在c#语言中使用Regex. 可以通过以下两种方式之一使用正则表达式引擎: 通过调用 Regex 类的静态方法. 方法参数包含输入字符串和正 ...

  9. c#基础语言编程-正则表达式基础

    引言 正则表达式是一种用高度抽象的字符串来描述字符串特征,进而实现对字符串的匹配.提取.替换等等.正则表达式(以下简称正则,Regex)通常不独立存在,各种编程语言和工具作为宿主语言提供对正则的支持, ...

随机推荐

  1. 无法定位程序输入点 crtis tailoredApp 于动态链接库MSVCR110.dll

    最近 在安装完   PHP开发,集成环境 WAMP  后,运行老是提示 “无法定位程序输入点 crtis tailoredApp 于动态链接库MSVCR110.dll”  网上百度,大多说是重新下载“ ...

  2. MagicNotes:自我管理中的破窗效应

    MagicNotes,思绪随风飞扬,偶尔在这里停留. 在<程序员修炼之道——从小工到专家>这本书里,有这么一段描述: 在市区,有些建筑漂亮而整洁,而另一些却是破败不堪的“废弃船只”.为什么 ...

  3. redmine发送邮件

    vim /data/server/redmine/apps/redmine/htdocs/config/configuration.yml default: # Outgoing emails con ...

  4. electron Uncaught ReferenceError: jQuery is not defined

    用electron写桌面程序时 ui部分的html页面引入的js会用到jquery 用常规的方式引入是不行的,会抛出如题的异常 <script type="text/javascrip ...

  5. Java基础之集合框架——使用集合Vector<>挑选演员(TryVector)

    控制台程序. public class Person implements Comparable<Person> { // Constructor public Person(String ...

  6. Effective C++ 5.实现

    //条款26:尽量延后变量的定义式出现的时间 // 1.不仅应该延后变量的定义,更应该直到使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初始值为止.如果这样,不仅能够避免构造和析构的非必 ...

  7. Lintcode: Segment Tree Modify

    For a Maximum Segment Tree, which each node has an extra value max to store the maximum value in thi ...

  8. ACM之Java速成(1)

    这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 1. 输入: 格式为:Scanner cin = new Sc ...

  9. [原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  10. Java基础(53):内部类(转)

    java中的内部类总结 内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行 ...