事件是电脑输入设备(鼠标、键盘)与页面进行交互的响应
告诉浏览器,当事件响应后要执行哪些操作代码
onload:加载完成事件 页面加载完成之后,常用于做页面js代码初始化操作
(1)静态:写在body标签中
(2)动态:window.onload = function(){};
onclick:单击事件 常用于按钮的点击响应操作
(1)静态:一般写在button标签中
(2)动态:var btn=document.getElementById("");
btn.onclick = function(){};
onblur:失去焦点事件 常用于输入框失去焦点后验证其输入内容是否合法
onchange:内容发生改变事件 常用于下拉列表和输入框内容发生改变后的操作
onsubmit:表单提交事件 常用于表单提交前,验证所有表单项是否合法
return false 可以阻止表单提交,在验证到不合法时就return false
< form action=“http://localhost:8080” method=“get” οnsubmit=“return fun()”> //一定要写一个return
< input type=“submit” value=“静态注册”>
< /form>
function fun(){
alert(“静态注册页面”);
return false;
}
键盘事件
1.键盘事件一般都会绑定给一些可以获取到焦点的对象或者是document(输入框)
2.onkeydown:一直按着某个键事件会一直触发,连续触发时,第一次和第二次之间会间隔稍微长一些,其他的会非常快
3.onkeyup:按键被松开
4.event.keycode判断哪个按键被按下
event.altKey ctrlKey shiftKey判断对应是否被按下
5.return false 取消默认行为(向焦点框里自动添加输入按键)可以实现规定哪些按键能被按下
6.在使用时可以先输出按下键的编码来帮助 写代码
1.由内往外传播、冒泡传播
2.三个阶段:捕获阶段(由外向内捕获事件),目标阶段,冒泡阶段(由内向外执行事件)(在IE8及以下版本没有捕获阶段)
对网页进行增删改查:查找节点,读取节点,修改节点,创建节点,删除节点
节点:文档节点、元素节点、属性节点、文本节点
按id属性,精确查找一个元素对象
var elem=document.getElementById(“id”);效率非常高 只能用在document上 不是所有元素都有id(不加就不会执行)
按标签名查找
varelems=parent.getElementsByTagName(‘tag’); 注意是单引号,返回一个数组,需要通过下标访问
查找指定parent节点下的所有标签为tag的子代节点
(1).可用在任意父元素上
(2).不仅查直接子节点,而且查所有子代节点
(3).返回一个动态集合,即使只找到一个元素,也返回集合必须用[0],取出唯一元素
var elems =ul.getElementsByTagName(‘li’);
通过name属性查找
var elem = document.getElementsByName (‘name属性值’);
可以返回DOM树中具有指定name属性值的所有子元素集合
通过class查找
查找父元素下指定class属性的元素
var elems = parent.getElementsByClassName(‘class’); 有兼容性问题 IE8以下版本不支持
通过css选择器查找
元素、类、Id、后代、子代、群组选择器
var elems = parent.querySelector(“selector”); Selector支持一切css中选择器,如果选择器匹配的有多个,只返回第一个
var elsms = parent.querySelectorAll(“seletor”);查找多个选择器,返回的是非动态集合
innerHTML用于获取元素内部的HTML代码,对于自结束标签,这个属性没有意义,读取元素节点属性:元素.属性名(class标签用className)
innerText 获取元素内部的文本,纯文本,不含元素
根据属性查找父元素下的所有子节点:
父元素.childNodes 获取所有节点,根据DOM标准标签间写的空白也是节点(IE8及以下版本除外)
------换成用children属性,获取当前元素的所有子元素,不会包含空白文档
父元素.firstChild 获取父元素下第一个节点(包含空白文本)
------换成用firstElementChild获取第一个子元素(不支持IE8及以下版本)
父元素.lastChild 获取父元素下的最后一个节点
找父节点:子节点.parentNode;
找前兄弟节点:子节点.previousSibling; (会获取空白处) 子节点.previousElementSibling; (会获取前一个节点,不包含空白) 找兄弟节点:
document.body------body标签
document.documentElement------html标签
document.all------页面中所有的元素,返回值为一个数组 相当于getElementByTagName("*")
confirm()用于弹出一个有确认和取消的提示框---------有bool型的返回值
DOM标准:
核心DOM:可操作一切结构化文档的AOI,包括HTML和XML(万能、繁琐)
HTML DOM:专门操作HTML文档简化版DOM API仅对常用的复杂的API进行了简化(不是万能,简单的)
修改属性四个操作:
读取属性值
(1)先获得属性节点对象,再获得节点对象的值: elem.attributes[下标/属性名] elem.getAttributeNode[属性名] attrNode.value-----属性值;;
(2) 直接获得属性值:elem.getAttribute(“属性名”)
修改属性值
(3)elem.setAttribute(“属性名”,value)
判断是否包含指定的属性:
element.hasAttribute(‘属性名’) 返回值为bool类型
移除属性
elem.removeAttribute(“属性名”)
修改样式:(修改的是内联样式,具有较高的优先级,改后立即显示,但如果在样式中写了!important,则此时样式会有最高优先级,js修改代码会失效)
(1)内联样式:elem.style.属性名(也可以用来读取样式,读取的也是内联样式,如果内联样式没有就为空)
(2)属性名:去横线,变驼峰 (background-color-----backgroundColor )
获取元素的当前显示样式(都是只读的,修改只能用style)
元素.currentStyle.样式名-----可以获取当前元素正在显示的样式(如果没有设置样式就获取默认样式(宽度:auto),只有IE浏览器支持,其他的都不行)
(除IE8及以下版本的)浏览器通用:getComputedStyle() 这个方法是window的方法,可以直接使用
需要两个参数:
1.需要获取样式的元素
2.传递一个伪元素,一般为null
该方法会返回一个对象,对象中封装了当前元素对应的样式,访问:对象.样式名,如果没有设置样式,会获取真实的值,而不是默认值,比如宽度:auto(默认值)—>具体宽度;颜色—>rgb值
兼容所有浏览器(自己创建一个判断方法):(兼容性问题都是一个思路,先判断有没有,有就用,没有就不用)
function getStyle(obj,name){
if(window.getComputedStyle) (在IE8中直接用getComputedStyle会报错,因为不存在这个变量,但是用Window.getComputedStyle属性会返回undefined,不会报错)
return getComputedStyle(obj,null)[name];(不写.name,写了表示访问name属性,写死了)
else
return obj.currentStyle[name];
或者 return window.getComputedStyle?getComputedStyle(obj,null)[name]:obj.currentStyle[name];
}
都是只读属性,修改只能修改style
创建空元素
var elem = document.createElement(“元素名”) var table = document.ceateElement(“table”);
设置关键属性
elem.属性名=“属性值”
elem.innerHTML=“go to tmooc” a.href=“http…”
设置关键样式
元素.style.样式名=样式值
elem.style.opacity=“1”;
elem.style.cssText=“width:100px;height:100px”;(可添加多个样式)
将元素添加到DOM树 parentNode.appendChild(childNode); 添加在最后一个父元素
parentNode.insertBefore(newChild,existingChild) 在父元素中的指定子节点之前添加一个新的子节点,指定子字节通过查找得到
添加元素优化:尽量少的操作DOM树,每次修改DOM树,都导致重新layout,先构建好小树,再挂到DOM树上
(1)如果同时创建父元素和子元素时,建议在内存中先将子元素添加到父元素,再将父元素一次性挂到页面上
(2)如果只添加多个平级子元素时,就要将所有子元素,临时添加到文档片段中,再将文档片段整体添加到页面
文档片段: 内存中,临时保存多个平级元素的虚拟父元素,用法和普通父元素完全一样
步骤:
(1)创建片段: var frag =document.createDocumentFragment()
(2)将子元素临时追加到frag中 frag.appendChild(child);
(3)将frag追加到页面 parent.appendChild(frag);
append之后,frag自动释放,不会占用空间
注意:
DOM操作中如果涉及父元素,直接元素.parentNode就行,不用管是谁
使用innerHTML也可以实现增删改查,直 接改html代码,但是要避免不直接操作DOM树
使用:直接使用或者作为window的属性使用
获取当前窗口大小:完整窗口大小:window.outerWidth/outerHeight
文档显示区大小:window.innerWidth/innerHeight
定时器:让程序按指定时间间隔自动执行任务,实现网页动态效果、计时功能等
分类:
(1)周期性定时器:setinterval(ex p,time)
exp:执行语句
time:时间周期,单位为毫秒
注:在开启下一个定时器时要先关闭当前元素的上一个定时器,不然会出现定时器重复开启(加速)
停止定时器:(1)给定时器取名:var timer =setinterval(…)
(2)停止定时器:clearinterval(timer);
clearinterval()可以接受任何参数,包括null,undefined,如果参数有效则执行,无效则什么都不做
(2)一次性定时器 :让程序延迟一段时间执行 setTimeout(exp,time)
time:时间间隔,单位为毫秒
(1)由于历史原因,Navigator对象中的大部分属性都不能帮助我们识别浏览器了,一般我们只会使用userAgent来判断浏览器的信息,userAgent是一个字符串,这个字符串中包含有用来描述浏览器的信息,不同浏览器有不同的userAgent,配合正则表达式(是否含有浏览器名字关键字)来判断是什么浏览器
(2)由于IE11没有MSIE关键字,所以IE浏览器不能这样操作,但是IE有很多自己特有的对象和属性,我们可以通过判断是否存在来看
if(“ActiveXObject” in winodw)一个特殊的对象(即window的属性)
(1)length属性,可以获取到当前访问的链接数量
(2)back()可以回退到上一个页面,与返回按钮一样
(3)forward()可以跳转到下一个页面,作用与前进按钮一样
(4)go()可以跳转到指定页面,它需要一个整数作为参数:
1–向前跳转一个页面
2–向前跳转两个页面
-1–向后跳转一个页面
-2–向后跳转两个页面
直接打印,可以获取当前页面的完整路径
可以直接修改Location为相对路径或者绝对路径,并且会生成历史记录
Location.assign("…")------>跳转到其他页面
Location.reload()------->刷新页面
传一个参数true:强制清空缓存(与ctrl+f5是一个效果,完全清空文本框内容)
Location.replace("…")用新的页面替换当前页面,但是不会生成历史记录,不能使用回退按钮回退