document.getElmentById('id'); 只能在document下获取json
obj.getElementsByTagName();数组
obj.getElementsByClassName();浏览器
obj.childrenapp
var aLi=oUl.children //获取全部子级dom
A:ide
if(){}
if(){}else{}
if(){}else if(){}
if(){}else if(){}else{}函数
B:性能
switch(变量){
case '条件':
语句
break; //跳出
default: 默认
break;
}spa
C:3d
true&&语句;
初始化 条件 语句 自增
while(){} 不肯定次数的循环
for(){} 有固定次数的循环 性能高
for in :
for( 变量 in 对象) {代码};用于遍历数组或对象的属性
能够循环json和数组(arr),因此性能低
检测数据类型:typeof
1)基本类型
string 字符串
number 数字 ( NaN属于number类型,非数字(只是一个标识)。特色:本身不等于本身 )
alert(isNaN(oT.value)); //判断是否是NaN
boolean 布尔值
undefined 未定义
2)复合类型
object 对象( Object本质上是由一组无序的名值对组成的,如object、array、data等 )
alert(typeof null);//object 空对象也是对象
3)function 函数
附tips:数组的两种写法:
var arr=[1,2,3,4];
var Array(1,2,3,4);
为何要转换
好比一些数字,可能被识别成字符串,转成数字方便使用
parseInt 整数(舍弃小数 和数字后面的非数字部分)
1 var a='aa12abc'; //NaN 非数字 2 var a='12abc'; 3 alert(parseInt(a));
1 <script> 2 window.onload=function (){ 3 var oTxt1=document.getElementById('txt1'); 4 var oTxt2=document.getElementById('txt2'); 5 var oBtn=document.getElementById('btn'); 6 7 oBtn.onclick=function (){ 8 var oT1=parseInt(oTxt1.value); 9 var oT2=parseInt(oTxt2.value); 10 11 alert(oT1+oT2); 12 }; 13 }; 14 </script> 15 </head> 16 17 <body> 18 <input id="txt1" type="text" /> 19 + 20 <input id="txt2" type="text" /> 21 = 22 <input id="btn" type="button" value="结果" /> 23 </body>
1 <script> 2 window.onload=function (){ 3 var oTxt1=document.getElementById('txt1'); 4 var oTxt2=document.getElementById('txt2'); 5 var oBtn=document.getElementById('btn'); 6 var oS=document.getElementById('s1'); 7 8 oBtn.onclick=function (){ 9 alert(oS.value); 10 11 var oT1=parseInt(oTxt1.value); 12 var oT2=parseInt(oTxt2.value); 13 14 alert(oT1+oT2); 15 }; 16 }; 17 </script> 18 </head> 19 20 <body> 21 <input id="txt1" type="text" /> 22 <select id="s1"> 23 <option>+</option> 24 <option>-</option> 25 <option>*</option> 26 <option>/</option> 27 </select> 28 <input id="txt2" type="text" /> 29 = 30 <input id="btn" type="button" value="结果" /> 31 </body>
parseFloat 整数、小数/浮点数
1 var a='12.13abc'; 2 alert(parseFloat(a)); //12.13
Number 纯数字
1 var a='123abc'; 2 alert(Number(a)); //NaN
-减 *乘 /除 %模
1 var a='12'; 2 var b=5; 3 4 alert(a*b);
+ - * / %
+= -= *= /= %=
< > <= >= != ==
=== !==
! 非 取反
&& 与 而且
|| 或 或者
1 <script> 2 var arr=[55,63,18,26,99,-100]; 3 4 function findArr(n){ 5 //查看全部数字 6 for(var i=0; i<arr.length; i++){ 7 //判断数组里面的某个数是否等于参数n 8 if(arr[i]==n){ 9 //找到了 返回true 10 return true; 11 //这里使用return有两个做用,一个是返回值(至关于alert),第二个是跳出当前的循环或方法,阻止后面的程序的运行。 12 } 13 } 14 //循环结束尚未,证实没找到 返回false 15 return false; 16 } 17 alert(findArr(88)); 18 </script>
1 function rnd(n,m){ 2 return parseInt(Math.random()*(m-n)+n); //固定的写法 3 } 4 5 alert(rnd(1,34));
真:true 非零数字都是真 非空字符串 非空对象
假:false 数字零 空字符 undefined null NaN
var oDate=new Date(); 日期对象
var y=oDate.getFullYear(); 年
var m=oDate.getMonth()+1; 月
var d=oDate.getDate(); 日
var day=oDate.getDay(); 星期
var H=oDate.getHours(); 时
var M=oDate.getMinutes(); 分
var S=oDate.getSeconds(); 秒
var MS=oDate.getMilliseconds() 毫秒
oDate.setFullYear
oDate.setHours
oDate.getTime 时间戳
random
floor
ceil
round
abs
sqrt
pow
max
min
sin
cos
atan2
PI
获取子级 children
获取父级节点 parentNode
获取上一个兄弟节点 obj.previousElementSibling||obj.previousSibling
获取下一个兄弟节点 obj.nextElementSibling||obj.nextSibling
获取第一个子级
父级.children[0]
父级.firstElementChild||父级.firstChild
获取最后一个子级
父级.children[父级.children.length-1]
父级.lastElementChild||父级.lastChild
建立
document.createElement();
插入 (建立完了不会显示,须要插入以后才有显示)
父级.appendChild();
父级.insertBefore(obj,obj2);
删除
父级.removeChild();
DOM练习:简易留言板
obj.offsetLeft/Top 定位父级的距离
obj.offsetWidth/Height 盒子模型大小
offsetParent 获取定位父级
obj.getBoundingClientRect().left/top/right/bottom 绝对距离(自带的,性能高)
绝对距离的数值在IE7下面会多出2像素,若是不想多出2像素,可使用下面的兼容写法(本身封装的,性能低)
<style> *{ margin:0;padding: 0; } #div1{ width:500px; height:500px; background:red; position:absolute; margin:100px; } #div2{ width:300px; height:300px; background:yellow; position:absolute; margin:100px; } #div3{ width:100px; height:100px; background:green; position:absolute; margin:100px; } </style> <script> function getPos(obj){ var l=0; var t=0; while(obj){ // 不知道有多少个父级(不固定次数)用while循环 l+=obj.offsetLeft; t+=obj.offsetTop; obj=obj.offsetParent; //一直是本身的父级 } return {left:l,top:t}; } window.onload=function (){ var oDiv=document.getElementById('div3'); alert(getPos(oDiv).left); }; </script> <body> <div id="div1"> <div id="div2"> <div id="div3"></div> </div> </div>
高版本浏览器 getComputedStyle(obj,false)[sName]; sName就是style name
false是兼容低版本(3.x)火狐用的,也能够不写
IE8兼容写法: obj.currentStyle[sName];
onload 加载
window.onload 页面加载完成
obj.onclick 点击
obj.onmouseover 鼠标移入
obj.onmouseout 鼠标移出
obj.onmousedown 鼠标按下
obj.onmousemove 鼠标移动
obj.onmouseup 鼠标抬起
obj.onfocus 得到焦点
obj.onblur 失去焦点
ondblclick 双击
onchange 改变
oninput 输入
onkeydown 键盘按下
onkeyup 键盘抬起
oncontextmenu 鼠标右键
onmousewheel 鼠标滚轮(苹果电脑没有)
function (ev){
ev.clientX 鼠标x轴距离
ev.clientY 鼠标Y轴距离
}
滚动距离
低版本浏览器
高版本浏览器
兼容写法
IE9一下不兼容:pageX pageY 自带的滚动距离
获取可视区宽高:document.documentElement.clientWidth/Height
例子:div拖拽
事件绑定
obj.addEventListener('click',fn,false);
obj.removeEventListener('click',fn,false);解除绑定
事件冒泡
cancelBubble=true;阻止冒泡
事件委托
加给父级
事件源ev.srcElement
省性能
给将来元素加事件
运动
var start=0;
var iTarget
穿墙