i的问题,执行时机
循环中加事件,事件中使用i
循环中加定时器,定时器中使用i
解决方法:1 自定义属性(index)2封闭空间((function(){})(i));
封闭空间:(function(){
})(i); 作用:1解决i的问题2 解决变量名冲突的问题
作用域:起作用的范围
全局:外面没有任何函数包裹,在任何地方度可以使用
局部:只能在声明的函数内使用
闭包:子函数可以使用父函数的局部变量
js语言特性:不加var声明变量,是全局的 window就是全局的
等号表达式(var a=b=c=d=12 除了a其他全是全局)
逗号表达式:听逗号后面的
预解析:在js执行之前,会把所有声明提到顶部 不会突破作用域
js组成部分:
ECMAScript:核心解释器 99%兼容 不兼容能解决
DOM:文档对象模型(document object model) 95%兼容 不兼容可以解决
BOM:浏览器对象模型(browser object model) 基本上不兼容
DOM:操作文档 元素=标签=节点 dom树(节点关系) oEle。tagName 获取元素名字
节点:标签节点和文本节点
判断节点类型:oEle.nodeType 标签节点显示1 文本节点显示3 document显示9
获取:1 通过id获取一个元素:document。getELementById
2通过标签名获取一个元素:oEle。getElementByTagName
3通过class获取一个元素:oEle。getElementByClassName
4html:documen。documentElement
5body:document。body
通过节点关系获取
获取子节点:1 获取第一层子节点:oParent。children
2 获取标签和文本节点:oParent。childNodes(不推荐使用)
获取父节点:1获取结构上的父级:obj。parentNode 最大是document,在上就是null
2获取定位上父级:obj。offsetParent 最大是body,在上就是null
获取兄弟节点:1上一个兄弟节点:1:oEle。previousElementSiBling 兼容高级浏览器
2:oEle。previousSibling 兼容IE678
3:oElepreviousElementSibling||oEle.previousSibling都兼容
2下一个兄弟的节点:1:oELe。nextElementSiling 兼容高级浏览器
2:oELe。nextSiling 兼容IE678
3:oELe。nextElementSiling||oELe。nextSiling 都兼容
获取首尾子节点:1获取首子节点(oParent.children[0];超简单写法):
1:oParent.firstElementChild 兼容高级浏览器
2:oParent.firstChild 兼容IE678
3:oParent.firstElementChild||oParent.firstChild 都兼容
2获取尾子节点(oParent.children[oParent.children.length-1];超简单写法):
1:oParent.lastElementChild 兼容高级浏览器
2:oParent.lastChild兼容IE678
3:oParent.lastElementChild||oParent.lastChild 都兼容
创建标签:document。createElement(‘标签名’)
添加:默认添加到父级的最后 父级。appendChild(子级) 在某个元素之前插入:父级。insertBefore(要插入的元素,谁之前)
删除:父级中删除子级 父级。removeChild(子级)