事件:
需要注意以下三个的先后顺序。
还有更多在网上都可以搜索到。
添加事件:
1.可以用点符号法进行添加事件。
/*DOM0:
如果给同一个元素添加多个同类型事件,最后添加的事件会覆盖之前的
*/
/*DOM0
* 1:
内联模型(行内绑定)
* 2
:脚本模型(动态绑定)
*/
var
div
= document.
getElementById
(
"div"
);
div
.
onclick
=
function
() {
console
.
log
(
1
);
};
div
.
onclick
=
function
() {
console
.
log
(
2
);
}
2.DOM2
/*DOM2:
可以给同一个元素添加多个同类型事件
*/
/*DOM2
* 1:addEventListener W3C
* 2
:
attachEvent IE*/
/*1:addEventListener
三个参数
*
参数
1
:用来指定事件类型
W3C
没有
on
前缀
*
参数
2
:用来指定事件处理函数
*
参数
3
:用来指定事件模型(事件冒泡和事件捕获)
*/
/*attachEvent:
只有两个参数
*
参数
1
:用来指定事件类型
IE
仍然有
on
前缀
*
参数
2
:用来指定事件处理函数
*/
var
div
=
document
.
getElementById
(
"div"
);
if
(
document
.
addEventListener
){
//W3C
div
.
addEventListener
(
"click"
,
function
() {
alert
(
"W3C"
)
})
}
else
{
//IE
div
.
attachEvent
(
"onclick"
,
function
() {
alert
(
"IE"
);
})
}
需要注意的是:如果通过DOM2模型给同一个元素添加多个同类型事件监听
* 在W3C类型的浏览器下,先声明的先触发
* 在IE类型的浏览器下,先声明的后触发
/*
参数
3:
false
: 事件冒泡 事件从子元素流向父元素 默认
true
: 事件捕获 事件从父元素流向子元素
*/
/*
根据不同的浏览器类型,采用不同的方法添加点击事件
*/
//
根据不同的事件类型,采用不同的方法取消事件冒泡
function
stop
(e) {
if
(e.
stopPropagation
){
//w3c
e.
stopPropagation
();
}
else
{
e.
cancelBubble
=
true
;
}
}
清楚监听事件:
if
(
div
.
addEventListener
){
/*
添加事件事件监听时,只有当事件出路函数为外部函数的时候,添加的事件才能被移除
*/
div
.
addEventListener
(
"click"
,
show1
);
div
.
addEventListener
(
"click"
,
show2
);
}
else
{
div
.
attachEvent
(
"onclick"
,
show1
);
div
.
attachEvent
(
"onclick"
,
show2
);
}
/*
如果要移除事件监听,
addEventListener()
的执行函数必须使用外部函数
*/
function
cleanEvent
() {
if
(
document
.
addEventListener
){
div
.removeEventListener(
"click"
,
show1
);
div
.removeEventListener(
"click"
,
show2
);
}
else
{
div
.
detachEvent
(
"onclick"
,
show1
);
div
.
detachEvent
(
"onclick"
,
show2
);
}
}
function
show1
() {
alert
(
1
);
}
function
show2
() {
alert
(
2
);
}
/*
添加事件事件监听时,只有当事件出路函数为外部函数的时候,添加的事件才能被移除
*
*
当以外部函数形式给同一个元素添加多个同类事件的时候,只会保留一个。
*
当以内部函数形式给同一个元素添加多个同类事件的时候,会全部保留。
* */
div
.
addEventListener
(
"click"
,
function
() {
alert
(
1
);
});
div
.
addEventListener
(
"click"
,
function
() {
alert
(
1
);
});
主要是因为添加同类事件时外部函数需要使用一样的函数名。
JS对象
数组:
/*concat():
连接两个或更多的数组(或普通数据)
*
会解析新连接的数组元素,然后追加到老数组尾部
*/
// var result = arr2.concat(arr3);
// var result = arr2.concat(arr3,arr4);
var
result
=
arr2
.
concat
(
arr3
,
arr4
,
"ccy"
,
1
);
console
.
log
(
result
);
/*push():
在数据的末尾添加一个新的元素,不会生成新的数组,只是在老数组的基础上进行修改
*
如果追加的是数组,
push
方法不会解析数组元素,而是直接把整个数组追加到老数组尾部
*/
var
arr5
= [
"zhangsan"
,
"lisi"
,
"wangwu"
];
var
result
=
arr5
.
push
(
"sunliu"
);
// var result = arr5.push(arr2);
console
.
log
(
result
);
console
.
log
(
arr5
);
/*pop():
从数组的尾部删除一个元素并返回被删除的元素
*/
result
=
arr5
.
pop
();
console
.
log
(
result
);
console
.
log
(
arr5
);
/*unshift()
:在数组的头部添加一个新的元素,并返回数组的长度
*
如果添加的是数组,
unshift
方法不会解析数组元素,而是直接把整个数组当成一个元素添加到老数组头部
*/
// result = arr5.unshift("ccy");
result
=
arr5
.
unshift
([
"ccy"
,
"jereh"
]);
console
.
log
(
result
);
console
.
log
(
arr5
);
/*shift():
从数组的头部删除一个元素并返回被删除的元素
*/
result
=
arr5
.
shift
();
console
.
log
(
result
);
/*sort:
对数组元素进行升序排列,返回排序以后的数组
*/
var
arr6
= [
"tom"
,
"tab"
,
"dom"
,
"horse"
,
"item"
,
"ele"
];
arr6
.
sort
();
console
.
log
(
arr6
);
/*sort()
函数可以接受一个排序函数,自定义的排序函数可以自己定义排序规则。
来打破默认的排序规则
*/
var
arr7
= [
10
,
1
,
20
,
22
,
34
,
67
,
3
,
8
,
9
,
12
];
console
.
log
(
arr7
.
sort
(
sortNum
));
/*
自定义的排序函数
*/
function
sortNum
(a,b) {
return
a - b;
}
/*reverse():
对数组的元素进行倒序排列
*/
var
arr8
= [
"zhangsan"
,
"lisi"
,
"wangwu"
];
console
.
log
(
arr8
.
reverse
());
/*slice():
接收两个参数
*
参数
1
:开始索引 (包括)
*
参数
2
:结束索引 (不包括)
*
如果只写一个参数,默认是开始索引,一直截取到数组的最后一个
*/
var
arr9
= [
"zhangsan"
,
"lisi"
,
"wangwu"
,
"sunliu"
,
"tianqi"
];
console
.
log
(
arr9
.
slice
(
1
));
对于String对象:
/*String
对象的方法
*/
/*
大小写转换
*/
var
name
=
"ccy"
;
var
result =
name
.
toUpperCase
();
console
.
log
(result.
toLowerCase
());
/*charAt():
返回指定索引处的字符
*/
console
.
log
(
name
.
charAt
(
2
));
/*indexOf():
返回指定字符的索引
*/
console
.
log
(
name
.
indexOf
(
"c"
,
1
));
对于Boolean对象:
/*
隐式转换
*/
/*1:null
* 2:0
* 3:-0
* 4:NaN
* 5:""
* 6:undefined
* 7:false*/
if
(!
false
){
// alert(false);
}
/*
显式转换
*/
var
result
=
new
Boolean(
false
);
if
(!
result
.
valueOf
()){
alert
(
false
);
}