javascript总结
转自:https://www.cnblogs.com/zhangxinqi/p/8884520.html
JavaScript简介:
JavaScript是web的编程语言,所有现代的HTML页面都使用JavaScript。
JavaScript是一种轻量级的编程语言;可以插入HTML页面的编程代码;可由所有的现代浏览器执行。
1、javascript显示数据
javascript可以通过不同的方式来输出数据:
- 使用 window.alert() 弹出警告框。
- 使用 document.write() 方法将内容写到 HTML 文档中。
- 使用 innerHTML 写入到 HTML 元素。
- 使用 console.log() 写入到浏览器的控制台
2、javascript语法
数字(number)字面量,可以是整数或者是小数,或者科学计数(e)。
字符串(string)字面量,可以使用单引号或者双引号。
表达式字面量,用于计算。
数组(array)字面量,定义一个数组:[10,20,30,40]
对象(object)字面量,定义一个对象:{name:"zhangsan",age:22,sex:"men"}
函数(function)字面量,定义一个函数:function myfunction(a,b) {return a * b;}
javascript变量,使用关键字var来定义变量,使用等号来为变量赋值:
在javascript中声明无值的变量时,其值实际上是undefined。
如果重新声明变量,该变了的值不会丢失,在重新赋值时才会丢失。
var a,length
x = 18
length = 8
javascript语句使用分号分隔。
和其他编程语言一样,javascript保留一些关键字为自己所用,如:var关键字告诉浏览器创建一个新的变量。
javascript关键字必须以字母、下划线或美元符开始,后续的字符可以是字幕,数字,下划线或者美元符,数组不允许作为首字符出现。
javascript注释使用双斜杠“//”进行单行注释,多行注释以/*开始,以*/结尾。
JavaScript 对大小写是敏感的。
JavaScript 使用 Unicode 字符集。
Unicode 覆盖了所有的字符,包含标点等字符。
JavaScript 语句标识符 (关键字) :
语句 | 描述 |
---|---|
break | 用于跳出循环。 |
catch | 语句块,在 try 语句块执行出错时执行 catch 语句块。 |
continue | 跳过循环中的一个迭代。 |
do ... while | 执行一个语句块,在条件语句为 true 时继续执行该语句块。 |
for | 在条件语句为 true 时,可以将代码块执行指定的次数。 |
for ... in | 用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。 |
function | 定义一个函数 |
if ... else | 用于基于不同的条件来执行不同的动作。 |
return | 退出函数 |
switch | 用于基于不同的条件来执行不同的动作。 |
throw | 抛出(生成)错误 。 |
try | 实现错误处理,与 catch 一同使用。 |
var | 声明一个变量。 |
while | 当条件语句为 true 时,执行语句块。 |
提示:JavaScript 是脚本语言。浏览器会在读取代码时,逐行地执行脚本代码。而对于传统编程来说,会在执行前对所有代码进行编译。
3、javascript数据类型
字符串(String)、数字(Number)、布尔(Boolean)、数组(Array)、对象(Object)、空(Null)、未定义(Undefined)。
JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型:
var x; // x 为 undefined
var x = 5; // 现在 x 为数字
var x = "John"; // 现在 x 为字符串
javascript数组:
创建数组的方法:数组下标是基于零的,所以第一个项目是 [0],第二个是 [1],以此类推
var array1=new array();
array1[0]="none";
array1[1]="two";
array1[2]="three";
//或者
var array1 = new array("none","two","three");
//或者
var array1=["none","two","three"];
javascript对象:
对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔:
var person={firstname:"John", lastname:"Doe", id:5566};
对象属性有两种寻址方式:
name=person.lastname;
name=person["lastname"];
Undefined 这个值表示变量不含有值;可以通过将变量的值设置为 null 来清空变量。
当您声明新变量时,可以使用关键词 "new" 来声明其类型:
var carname=new String;
var x= new Number;
var y= new Boolean;
var cars= new Array;
var person= new Object;
4、javascript对象
在javascript中,几乎所有的事物都是对象,对象也是一个变量,但对象可以包含多个值(多个变量)。
javascript对象是变量的容器,但是,我们通常认为javascript对象的键值对是容器,键值对的通常写法为name:value,以冒号分割,键值对在javascript对象通常称为对象属性。
对象方法:对象的方法定义了一个函数,并作为对象的属性存储,对象方法通过添加()调用,作为一个函数
访问对象方法:
你可以使用以下语法创建对象方法:
methodName : function() { code lines }
你可以使用以下语法访问对象方法:
objectName.methodName()
5、javascript事件
下面是一些常见的HTML事件的列表:
事件 | 描述 |
---|---|
onchange | HTML 元素改变 |
onclick | 用户点击 HTML 元素 |
onmouseover | 用户在一个HTML元素上移动鼠标 |
onmouseout | 用户从一个HTML元素上移开鼠标 |
onkeydown | 用户按下键盘按键 |
onload | 浏览器已完成页面的加载 |
事件可以用于处理表单验证,用户输入,用户行为及浏览器动作:
- 页面加载时触发事件
- 页面关闭时触发事件
- 用户点击按钮执行动作
- 验证用户输入内容的合法性
可以使用多种方法来执行 JavaScript 事件代码:
- HTML 事件属性可以直接执行 JavaScript 代码
- HTML 事件属性可以调用 JavaScript 函数
- 你可以为 HTML 元素指定自己的事件处理程序
- 你可以阻止事件的发生。
6、字符串属性和方法
属性:
属性 | 描述 |
---|---|
constructor | 返回创建字符串属性的函数 |
length | 返回字符串的长度 |
prototype | 允许您向对象添加属性和方法 |
方法:
方法 | 描述 |
---|---|
charAt() | 返回指定索引位置的字符 |
charCodeAt() | 返回指定索引位置字符的 Unicode 值 |
concat() | 连接两个或多个字符串,返回连接后的字符串 |
fromCharCode() | 将 Unicode 转换为字符串 |
indexOf() | 返回字符串中检索指定字符第一次出现的位置 |
lastIndexOf() | 返回字符串中检索指定字符最后一次出现的位置 |
localeCompare() | 用本地特定的顺序来比较两个字符串 |
match() | 找到一个或多个正则表达式的匹配 |
replace() | 替换与正则表达式匹配的子串 |
search() | 检索与正则表达式相匹配的值 |
slice() | 提取字符串的片断,并在新的字符串中返回被提取的部分 |
split() | 把字符串分割为子字符串数组 |
substr() | 从起始索引号提取字符串中指定数目的字符 |
substring() | 提取字符串中两个指定的索引号之间的字符 |
toLocaleLowerCase() | 根据主机的语言环境把字符串转换为小写,只有几种语言(如土耳其语)具有地方特有的大小写映射 |
toLocaleUpperCase() | 根据主机的语言环境把字符串转换为大写,只有几种语言(如土耳其语)具有地方特有的大小写映射 |
toLowerCase() | 把字符串转换为小写 |
toString() | 返回字符串对象值 |
toUpperCase() | 把字符串转换为大写 |
trim() | 移除字符串首尾空白 |
valueOf() | 返回某个字符串对象的原始值 |
7、逻辑判断与循环
switch语句,选择执行多个代码块之一,使用 default 关键词来规定匹配不存在时做的事情
工作原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。请使用 break 来阻止代码自动地向下一个 case 运行。
<body>
<button onclick="myfunc()">点击</button>
<p id="demo"></p>
<script>
function myfunc(){
var x;
var d = new Date().getDay(); //获取星期值
switch (d){ //匹配星期
case 0:x="星期日";
break;
case 1:x="星期一";
break;
case 2:x="星期二";
break;
case 3:x="星期三";
break;
case 4:x="星期四";
break;
case 5:x="星期五";
break;
case 6:x="星期六";
break;
}
document.getElementById("demo").innerHTML=x; //匹配的x值赋值给demo对象
}
</script>
</body>
for循环:
<script>
for(var i=0;i<10;i++){
document.write("数字:" + i + "<br />");
}
</script>
JavaScript 支持不同类型的循环:
- for - 循环代码块一定的次数
- for/in - 循环遍历对象的属性
- while - 当指定的条件为 true 时循环指定的代码块
- do/while - 同样当指定的条件为 true 时循环指定的代码块
for in 语句循环遍历对象的属性:
var pre = {one:'java',two:'python',three:'php',four:'c++',five:'bash'};
for (var i in pre){
console.log(i + "==" + pre[i]);
}
while循环:指定条件为真时循环执行代码块。
var i = 0;
while ( i < 10){
console.log("this is number:" + i + "<br />");
i++;
}
do while循环,while循环的变体,该循环会在检查条件是否为真之前执行一次代码块,然后如果条件为真的话重复一个循环。
<body>
<p>do while循环</p>
<button onclick="myfunction()">点击</button>
<p id="demo"></p>
<script>
function myfunction(){
var x="",i=0;
do{
x=x+"该数字为:"+i+"<br />";
i++;
}while(i<5)
document.getElementById("demo").innerHTML=x;
}
</script>
</body>
可以对 JavaScript 语句进行标记,如需标记 JavaScript 语句,请在语句之前加上冒号:
continue 语句(带有或不带标签引用)只能用在循环中。
break 语句(不带标签引用),只能用在循环或 switch 中。
通过标签引用,break 语句可用于跳出任何 JavaScript 代码块。
typeof操作符,可以检测变量的数据类型。
8、JavaScript类型转换
Number() 转换为数字, String() 转换为字符串, Boolean() 转化为布尔值。
在 JavaScript 中有 5 种不同的数据类型:
- string
- number
- boolean
- object
- function
3 种对象类型:
- Object
- Date
- Array
2 个不包含任何值的数据类型:
- null
- undefined
请注意:
- NaN 的数据类型是 number
- 数组(Array)的数据类型是 object
- 日期(Date)的数据类型为 object
- null 的数据类型是 object
- 未定义变量的数据类型为 undefined
<script>
document.getElementById('demo').innerHTML =
typeof "John" + "<br>" + //string
typeof 3.14 + "<br />" + //number
typeof NaN + "<br />" + //number
typeof false + "<br />" + //boolean
typeof [1,2,3] + "<br />" + //object
typeof {name:"john",age:22} + "<br />" + //object
typeof mycar + "<br />" + //undefined
typeof null; //object
</script>
constructor 属性返回所有 JavaScript 变量的构造函数:
//判断是否为数组
<script>
var fru = ['banana','orange','apple','mango']
document.getElementById("demo").innerHTML = isArry(fru);
function isArry(myarray){
return myarray.constructor.toString().indexOf("Array") > -1;
}
</script>
//判断是否为日期
<script>
var mydate = new Date();
window.alert(mydate);
document.getElementById("demo").innerHTML = isArry(mydate);
function isArry(myarray){
return myarray.constructor.toString().indexOf("Date") > -1;
}
</script>
JavaScript 类型转换:
全局方法 String() 可以将数字转换为字符串:
<p id="demo"></p>
<script>
var aa = 88;
document.getElementById("demo").innerHTML =
typeof aa + "<br />" +
typeof String(aa);
</script>
to String()方法同样可以将数字转换为字符串;还可以将布尔值转换为字符串
toExponential()把对象的值转换为指数计数法。
toFixed() 把数字转换为字符串,结果的小数点后有指定位数的数字。
toPrecision() 把数字格式化为指定的长度。
date方法,返回日期:
方法 | 描述 |
---|---|
getDate() | 从 Date 对象返回一个月中的某一天 (1 ~ 31)。 |
getDay() | 从 Date 对象返回一周中的某一天 (0 ~ 6)。 |
getFullYear() | 从 Date 对象以四位数字返回年份。 |
getHours() | 返回 Date 对象的小时 (0 ~ 23)。 |
getMilliseconds() | 返回 Date 对象的毫秒(0 ~ 999)。 |
getMinutes() | 返回 Date 对象的分钟 (0 ~ 59)。 |
getMonth() | 从 Date 对象返回月份 (0 ~ 11)。 |
getSeconds() | 返回 Date 对象的秒数 (0 ~ 59)。 |
getTime() | 返回 1970 年 1 月 1 日至今的毫秒数。 |
Number() 可以将字符串转换为数字,空字符串转换为0,其他字符串会转换为NaN;还可以将布尔值转换为数字
parseFloat() 解析一个字符串,并返回一个浮点数。
parseInt() 解析一个字符串,并返回一个整数。
一元运算符“+” :可以将变量转换为数字,如果变量不能转换,它仍然是一个数字,值为NaN。
将日期转换为数字:Number() 或 dateName.getTime()
<script>
var d = new Date();
document.getElementById("demo").innerHTML =
Number(d) + "<br />" + //将日期转换为数字
d.getTime(); //效果同上
</script>
自动转换类型:
当JavaScript尝试操作一个“错误”的数据类型时,会自动转换为“正确"的数据类型。
5 + null // 返回 5 null 转换为 0
"5" + null // 返回"5null" null 转换为 "null"
"5" + 1 // 返回 "51" 1 转换为 "1"
"5" - 1 // 返回 4 "5" 转换为 5
9、JavaScript正则表达式
语法:/正则表达式主体/修饰符(可选)
在 JavaScript 中,正则表达式通常用于两个字符串方法 : search() 和 replace()。
search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
<script>
function myfun(){
var str = "pythonbachjavascriptphp";
alert(str.search(/java/)); //查找匹配项返回匹配的起始位置
alert(str.replace(/java/i,"hello")) //替换查找的内容
}
myfun()
</script>
正则表达式修饰符:
i :执行对大小写不敏感的匹配
g :执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
m :执行多行匹配.
正则表达式模式:
[abc] :查找方括号之间的任何字符。
[0-9] :查找任何从0到9直接的数字
{x|y} :查找任何以|分隔的选项值.
\d :查找数字
\s :查找空白字符
\b :匹配单边单词
\uxxxx :查找以十六进制数xxxx规定的Unicode字符.
n+ :匹配任何包含至少一个N的字符串
n* :匹配任何包含零个或多个n的字符串
n? :匹配任何包含零个 或一个n的字符串。
在 JavaScript 中,RegExp 对象是一个预定义了属性和方法的正则表达式对象
test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
alert(/e/.test("abcdefg")); //匹配字符串中是否包含有匹配的文本,有则返回true.
exec() 方法用于检索字符串中的正则表达式的匹配。
该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
alert(/e/.exec("abceefg")); //返回匹配的结果
判断字符串是否为数字、字母、下划线组成:
function isvalid(str){return /^\w+$/.test(str);}
str = "123ddf_";
document.write(isvalid(str));
10、JavaScript错误处理
try 语句测试代码块的错误;catch 语句处理错误;throw 语句创建自定义错误。
try 语句允许我们定义在执行时进行错误测试的代码块。
catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。
JavaScript 语句 try 和 catch 是成对出现的。
<body>
<script>
var tex = '';
function message(){
try{
adlert("welcome guest");
}
catch(err){
tex="本页有错误 \n\n";
tex+="错误详细:"+err.message +"\n\n";
tex+="点击确定继续 \n\n";
alert(tex);
}
}
</script>
<input type="button" value="详细消息" onclick="message()" />
</body>
throw 语句允许我们创建自定义错误;正确的技术术语是:创建或抛出异常(exception)。
如果把 throw 与 try 和 catch 一起使用,那么您能够控制程序流,并生成自定义的错误消息。
<p>请输出一个 5 到 10 之间的数字:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">测试输入</button>
<p id="message"></p>
<script>
function myFunction() {
var message, x;
message = document.getElementById("message");
message.innerHTML = "";
x = document.getElementById("demo").value;
try {
if(x == "") throw "值为空";
if(isNaN(x)) throw "不是数字";
x = Number(x);
if(x < 5) throw "太小";
if(x > 10) throw "太大";
}
catch(err) {
message.innerHTML = "错误: " + err;
}
}
</script>
JavaScript的调试工具,可使用浏览器自带的调试工具,可按F12键调出。
也可以在代码中使用debugger关键字,当代码碰到debugger关键字后将不再往下执行。
<script>
function validateForm() {
var x = document.forms["myForm"]["fname"].value;
if (x == null || x == "") {
alert("需要输入名字。");
return false;
}
}
</script>
</head>
<body>
<form name="myForm" action="demo_form.php"
onsubmit="return validateForm()" method="post">
名字: <input type="text" name="fname">
<input type="submit" value="提交">
</form>
</body>
验证表单输入是否为1到10之间的数字:
<body>
<h1>javascript</h1>
<p>请输入1到10之间的数字</p>
<input id="numb">
<button type="button" onclick="myfunc()">提交</button>
<p id="demo"></p>
<script>
function myfunc(){
var x,text;
x=document.getElementById("numb").value;
if (isNaN(x) || x < 1 || x > 10){
text = "输入错误!";
}else{
text="输入正确!"
}
document.getElementById("demo").innerHTML=text;
}
</script>
</body>
11、实例
找对象的方法:
//按ID查找
alert(document.getElementById("ID"));
//按标签找,div,p,input...哪怕只找到一个也会包装成数组返回。
var hist = document.getElementsByTagName('div');
alert(hist);
alert(hist[0]);
//对应表单元素,可以按name来查询
alert(document.getElementsByName("username")[0]);
alert(document.getElementsByName('username')[0].value);
//按照类名来查找
alert(document.getElementsByClassName("className")[0]);
//找子对象children和父对象parent
alert(document.getElementById("ID").children.length);
alert(document.getElementById("ID").parent.length);
//改变css
document.getElementsByTagName('h1')[0].style.background="gray";
点击事件,颜色变化
<head>
<meta charset="UTF-8">
<title>js</title>
<script>
function togo(){
var test = document.getElementById("demo");
var coll = ["red","blue","green","black","yellow","purple","while","gray"];
//document.write(test.style.background.indexOf("blue"));
if(test.style.background.indexOf("blue") >=0){
test.style.background = "green";
}
else if(test.style.background.indexOf("green") >=0){
test.style.background = "red";
}
else if(test.style.background.indexOf("red") >=0){
test.style.background = "yellow";
}
else{
test.style.background = "blue";
}
}
</script>
</head>
<body>
<div id="demo" style="height:300px;width:300px;background:blue;" onclick="togo()"></div>
点击DIV使其背景色红绿交替 宽增高5px; 下边框增粗1px;
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.test1{
background:green;
}
.test2{
background:red;
}
</style>
<script>
function t(){
var div = document.getElementsByTagName('div')[0];
if(div.className.indexOf('test1') >= 0){
div.className = "test2";
}else{
div.className = "test1";
}
div.style.width = parseInt(div.style.width)+5+'px'; //parseInt转换字符为数字
div.style.height = parseInt(div.style.height)+5+'px';
div.style.borderBottomWidth =parseInt(div.style.borderBottomWidth)+1+'px';
}
</script>
</head>
<body>
<div class="test1" onclick="t();" style="width:200px;height:200px;border-bottom:5px solid black;">
点击DIV使其背景色红绿交替
宽增高5px;
下边框增粗1px;
</div>
</body>
上面的方法只能在内联标签下获取样式,不够灵活。下面使用getComputedStyle()方法获取计算的最终样式,再进行修改,这种方法获取的样式数值是只读的,不能修改。
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
width:200px;
height:200px;
border-bottom:1px solid black;
}
.test1{
background:green;
}
.test2{
background:red;
}
</style>
<script>
function getstyle(obj,attr){ //获取计算样式
return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj,null)[attr];
}
function t(){
var div = document.getElementsByTagName('div')[0];
if(div.className.indexOf('test1') >= 0){
div.className = "test2";
}else{
div.className = "test1";
}
div.style.width = parseInt(getstyle(div,"width"))+5+'px'; //parseInt转换字符为数字
div.style.height = parseInt(getstyle(div,'height'))+5+'px';
div.style.borderBottomWidth =parseInt(getstyle(div,'borderBottomWidth'))+1+'px';
}
</script>
</head>
<body>
<div class="test1" onclick="t();">
点击DIV使其背景色红绿交替
宽增高5px;
下边框增粗1px;
</div>
</body>
创建子节点并通过输入添加内容,删除子节点:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js删除和添加子对象</title>
<script>
function del(){
var lis = document.getElementsByTagName('li'); //获取子节点
var lastli = lis[lis.length-1]; //获取最后一个子节点
lastli.parentNode.removeChild(lastli); //通过父对象将子对象的最后一个删除
}
function add(){
var lia = document.createElement('li'); //创建子节点
var te = document.getElementsByName('name')[0].value; //获取节点内容
//alert(te);
var txt = document.createTextNode(te); //创建节点文本
lia.appendChild(txt); //将文本写入子节点
document.getElementsByTagName('ul')[0].appendChild(lia); //增加子节点
}
</script>
</head>
<body>
<input type="text" name="name" value="hehe" />
<input type="button" value="删除" onclick="del();" />
<input type="button" value="增加" onclick="add();" />
<ul>
<li>春</li>
<li>夏</li>
<li>秋</li>
<li>冬</li>
</ul>
</body>
</html>
使用innerHTML暴力操作节点子节点:
<head>
<meta charset="UTF-8">
<title>innerHTML暴力操作属性</title>
</head>
<body>
<input type="text" name="name" value=""/>
<input type="button" value="添加" onclick="add()"/>
<ul></ul>
</body>
<script>
function add(){
var ul = document.getElementsByTagName("ul")[0];
var text = document.getElementsByName('name')[0].value;
var allte = '<li>' + text + '</li>';
ul.innerHTML += allte;
}
</script>
联动菜单:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>联动菜单</title>
<script>
var area = [
['朝阳','海淀','丰台'],
['武汉','荆州','汉口'],
['奉贤','浦东','虹口']
];
function dd(){
var sel = document.getElementById('prov');
var opt = '';
if (sel.value == '-1'){
document.getElementById('city').innerHTML = opt;
return;
}
for (var i=0,len=area[sel.value].length;i<len;i++){
opt= opt + '<option value="'+ i +'">' + area[sel.value][i] + '</option>';
}
document.getElementById('city').innerHTML = opt;
}
</script>
</head>
<body>
<select name="" id="prov" onchange="dd();">
<option value="-1">请选择</option>
<option value="0">北京</option>
<option value="1">湖北</option>
<option value="2">上海</option>
</select>
<select name="" id="city">
</select>
</body>
</html>
window.setTimeout("function",time);//设置一个超时对象,只执行一次,无周期
window.setInterval("function",time);//设置一个超时对象,周期='交互时间'
停止定时:
window.clearTimeout(对象) 清除已设置的setTimeout对象
window.clearInterval(对象) 清除已设置的setInterval对象
定时更换图片:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js setTimeout</title>
<script>
function bang(){
var inp = document.getElementsByTagName('img')[0];
inp.src='2.jpg';
document.getElementsByName('vay')[0].value = 0;
}
setTimeout('bang()',3000); //设置定时3秒执行函数
</script>
</head>
<body>
<h1>定时器</h1>
<input type="button" name="vay" value="3"><br />
<img style="height:300px;width:300px;" src="1.jpg"/>
</body>
</html>
倒记时更换效果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function ban(){
var inp = document.getElementsByName('time')[0];
var time = parseInt(inp.value) - 1; //parseInt转换字符为数字
inp.value = time;
if(time == 0){
document.getElementsByTagName('img')[0].src='2.jpg';
clearInterval(clock); //清除定时
}
}
var clock = setInterval('ban()',1000); //指定1秒后执行ban()
</script>
</head>
<body>
<h1>定时器</h1>
<input type="button" name="time" value="5"/><br />
<img style="height:300px;width:300px;" src="1.jpg"/>
</body>
</html>
常用事件:
onclick 元素点击时
onfocus 元素获得焦点时
onblur 元素失去焦点时
当元素获取焦点时,改变元素的style值:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>thing</title>
<script>
function t1(){
document.getElementsByName('username')[0].style.border = '1px solid red';
}
function t2(){
document.getElementsByName('username')[0].style.border = '';
}
</script>
</head>
<body>
<p>
<input type="text" name="username" onfocus="t1();" onblur="t2()"/>
</p>
<p>
<input type="text" name="email"/>
</p>
</body>
</html>
onmouseover事件:鼠标指针移动到元素上时触发事件
onmouseout事件:在鼠标指针移出指定的对象时触发事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>鼠标经过事件</title>
<style>
div{
height:300px;
width:300px;
background:yellow;
border:2px solid green;
}
</style>
<script>
function t1(){
var div = document.getElementsByTagName('div')[0];
div.style.background = "red";
}
function t2(){
document.getElementsByTagName('div')[0].style.background = "green";
}
</script>
</head>
<body>
<h1>鼠标经过移开时发生的事件</h1>
<div id="" onmouseover="t1();" onmouseout="t2();" ></div>
</body>
</html>
onsubmit:表单提交时事件
onload:页面加载完毕时事件
事件、行为、结构分离:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件、行为、结构分离</title>
<style> //行为ccs
div{
width:300px;
height:300px;
border:2px solid blue;
}
</style>
</head>
<body>
<div> //结构
<p>
<ul>
<li>结构</li>
</ul>
</p>
</div>
</body>
<script> //事件
document.getElementsByTagName("div")[0].onclick = function (){
document.getElementsByTagName('div')[0].style.border ="5px solid red";
this.style.background ="yellow"; //this代表查找的对象本身
}
</script>
</html>
事件对象:事件发生的瞬间,发生位置,时间,鼠标按键,触发的节点等信息被打包成一个对象,此对象,系统自动传递给事件函数的第一个参数。
onmouseover当鼠标经过时移动位置:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件对象</title>
<style>
img{
width:130px;
height:130px;
position:relative;
left: 0px;
top: 0px;
}
</style>
</head>
<body>
<pre>
1.事件对象包含事件相关的信息,如鼠标,时间,触发的DOM对象等
2.事件对象被系统传递给事件函数的第一个参数
3.事件对象的属性在IE/w3c略有不同
4.一个重要的事件属性:target,srcElement(IE下),代表事件发生的所在DOM对象。
</pre>
<img src="./11.jpg" alt="" />
</body>
<script>
document.getElementsByTagName('img')[0].onmouseover = function(ev){
//console.log(ev);
this.style.left = ev.pageX + 10 + 'px';
this.style.top = ev.pageY + 10 + 'px';
}
</script>
</html>
事件委托:td委托table通过事件对象对属性更改
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
table{
width:300px;
height:300px;
border:0;
border-collapse:collapse;
background:green;
}
td{
border:1px solid gray;
}
</style>
</head>
<body>
<h1>事件委托</h1>
<table>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</body>
<script>
var num=0;
document.getElementsByTagName('table')[0].onclick = function(ev){
ev.target.style.background = num++%2?"black":"white";
} //使用事件委托对事件对象target操作改变属性
</script>
</html>
JS使用正则:
声明:var patt=/^d{11}$/;
使用:判断string是否符合正则要求:patt.test(String);
找出字符中符合正则的子串:patt.exec(String);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>正则</title>
</head>
<body>
<pre>
1.用户名由6-11位数字字母组成
2.email符合规范
3.不合规范不允许提交
</pre>
<form action="">
<p>用户名:<input type="text" name="username"/></p>
<p>email:<input type="text" name="email" /></p>
<p><input type="submit" value="提交" /></p>
</form>
</body>
<script>
document.getElementsByTagName('form')[0].onsubmit = function(){
var patt=/^[a-zA-Z0-9]{6,11}$/;
var email = /^\w+@\w+(\.\w+)+$/;
if(!patt.test(document.getElementsByName('username')[0].value)){
alert('用户名必须由6-11位数字字母组成');
return false;
}
else if(!email.test(document.getElementsByName('email')[0].value)){
alert('请输入正确的email');
return false;
}
}
</script>
</html>
exec匹配有邮箱的人并标记颜色:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>正则匹配</title>
<script>
function find(){
var lis = document.getElementsByTagName('li');
var email = /\w+@\w+(\.\w+)+/;
for(var i=0;i<lis.length;i++){
if(email.exec(lis[i].innerHTML) != null){
lis[i].style.background = 'green';
}
}
}
</script>
</head>
<body>
<input type="button" value="查找有邮箱的人" onclick="find();" />
<ul>
<li>张飞</li>
<li>关羽<guanyu@qq.com></li>
<li>刘备</li>
<li>赵云<zhaoyun@163.com></li>
</ul>
</body>
</html>