DOM即文档对象模型,DOM是W3C的标准,定义了表示和修改文档所需的方法。DOM对象用来操作HTML和XML功能的一类对象的集合,也可以说DOM是对HTML和XML的标准编程接口
HTML DOM是针对 HTML 文档的标准模型:
根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:
Node.hasChildNodes()
对节点的增删改查
简单的封装一个查找元素方法(仅限tag,class,id)
function find(selector){
if(selector[0] == '.'){
return document.getElementsByClassName(selector.substr(1));
}
else if(selector[0] == '#'){
return document.getElementById(selector.substr(1));
}
else{
return document.getElementsByTagName(selector);
}
}
function insertAfter(newElem, targetElem) {
var parent = targentElem.parentNode;
if (parent.lastChild == targentElem) {
parent.appendChild(newElem);
}
else {
parent.insertBefore(newElem, targetElem.nextSibling)
}
}
事件是可以被控件识别的操作,例如单击、双击、拖拽、编辑、状态改变等等。程序与用户交互的桥梁,HTML DOM 允许 JavaScript 对 HTML 事件作出反应。
<div></div>
var div = document.getElementsByTagName('div')[0];
div.onclick = function(){
alert(1);
};
div.onclick = function(){
alert(2);
};
//最后只弹出2
<div></div>
var div = document.getElementsByTagName('div')[0];
div.addEventListener('click', function(){
alert(1)}, false);
div.addEventListener('click', function(){
alert(2)}, false);
// 1和2先后弹出
当一个DOM事件被触发时,经历一下三个阶段
捕获阶段:先由文档的根节点document往事件触发对象,从外向内捕获事件对象;
目标阶段:到达目标事件位置(事发地),触发事件;
冒泡阶段:再从目标事件位置往文档的根节点方向回溯,从内向外冒泡事件对象。
当父子元素绑定同一事件类型时,子级元素先触发,父级元素后触发(自底向上)
focus,change, reset, select, submit, blur不冒泡
取消冒泡:
event.stopPropagation() w3c规范,ie9以下不支持
event.cancelBubble = true ie独有
当父子元素绑定同一事件类型时,父级元素先触发,子级元素后触发(自顶向下)
ie没有事件捕获
经典实例:
<style type="text/css">
.box1{
width:300px;
height:300px;
background:red;
}
.box2{
width:200px;
height:200px;
background:green;
}
.box3{
width:100px;
height:100px;
background:blue;
}
</style>
<div class="box1">
<div class="box2">
<div class="box3"></div>
</div>
</div>
<script>
var div = document.getElementsByTagName('div');
div[0].addEventListener('click', function(){
alert('我是box1')}, false);
div[1].addEventListener('click', function(){
alert('我是box2')}, false);
div[2].addEventListener('click', function(){
alert('我是box3')}, false);
</script>
var date1 = new Date() // 得到当前的日期和时间
var date2 = new Date(timestamp) // 时间戳格式化
var timestamp1 = (new Date()).valueOf();
var timestamp2 = new Date().getTime();
var timestamp3 = Number(new Date()) ;
BOM(Browser Object Model) 是指浏览器对象模型,浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。
常见的BOM对象
window:代表整个浏览器窗口(window是BOM中的一个对象,并且是顶级的对象)
Navigator :代表浏览器当前的信息,通过Navigator我们可以获取用户当前使用的是什么浏览器
Location: 代表浏览器当前的url信息,通过Location我们可以获取或者设置当前的地址信息
History:代表浏览器的历史信息,通过History我们可以实现上一步/刷新/下一步操作(出于
对用户的隐私考虑,我们只能拿到当前的浏览记录,不能拿到所有的历史记录)
Screen:代表用户的屏幕信息
document、history、location、navigator
注意:全局变量即为Window对象的属性
var isIE11 = (navigator.userAgent.toLowerCase().indexOf("trident") > -1 && navigator.userAgent.indexOf("rv") > -1);
var isIE = navigator.userAgent.indexOf("compatible") > -1 && navigator.userAgent.indexOf("MSIE") > -1 && !isOpera;
if(isIE11 || isIE){
alert("网站暂不支持此浏览器,请使用Chrome、FireFox或Safari等浏览器");
window.close();
}
window.location.href = url;