1.回顾: 上篇学习了,匿名函数和闭包,js面向对象及原型 ,BOM
2.这篇学习 浏览器检测 ,DOM ,动态加载样式
3.浏览器检测
-
1)navigator对象:常用的属性或方法:
navigator.appName 浏览器的名称,取得浏览器名称不精确!
navigator.userAgent 浏览器用户信息字符串
navigator.appVersion 浏览器版本
navigator.platform 所在的系统
navigator.plugins 检测插件(IE无法检测,IE的话需要检查控件是否存在!):
e.g:for(i=0;i<navigator.plugins.length;i++){
shu('插件名称:'+navigator.plugins[i].name);
shu('文件名:'+navigator.plugins[i].filename);
shu('插件描述:'+navigator.plugins[i].description);
shu('');
}
- 2)代码检测浏览器名称版本系统:浏览器嗅探器: 下载BrowserDetect的js库,来调用检测;
- 3)客户端检测:能力检测,怪癖检测(bug检测),用户代理检测.
- 4)具体客户端检测:查源代码,调用!
4.DOM基础
- DOM:Document Object Model 文档对象模型,针对html和xml文档的api。模型可以理解为网页文档的树形结构。
- 树形结构是有节点组成的,也叫元素。
节点分为三类:1.元素节点:就是标签 2.文本节点:其实就是标签内的内容 3.属性节点
Dom操作文档的时候,需要html操作完成后,才能操作和获取 - getElementById() : 参数传递一个元素的id值,这样就获得到了,这个标签。
- window.onload=function(){ 这里是执行的代码 }; : 用来等html加载完毕后再执行代码
- e.g :
测试
function shu(content){
console.log(content);
}
window.onload=function(){
var box=document.getElementById('div1'); //获取id为div1的标签
shu(box);
shu(box.tagName); //获取这个元素节点的标签名
shu(box.innerHTML); //获取标签元素节点里的文本
shu(box.id); //获取标签元素id属性的值,注意不是属性节点
shu(box.style); //获取样式
shu(box.style.color); //获取样式里的值
shu(box.className); //获取类名
box.innerHTML='yuan'; //设置文本内容,可以解析HTML内容
box.style.color='green'; //设置样式
};
- getElementsByTagName() :返回一个对象数组的集合
-
e.g:
var li=document.getElementsByTagName('li');
for(i=0;i<li.length;i++){
shu(li[i].innerHTML);
}
- getElementsByName() : 参数为 标签属性name的值,返回集合
- 标签属性操作getAttribute() , setAttribute()和removeAttribute()
-
e.g :
//获取body对象节点
var body=document.getElementsByTagName('body')[0];
shu(body);
//获取全部网页内容
var html=document.getElementsByTagName('*');
shu(html);
//通过name来获取标签内容,input 标签有name属性,可以操作
var box1=document.getElementsByName('div1')[0];
shu(box1.innerHTML)
//标签属性操作getAttribute() , setAttribute()和removeAttribute()
var box2=document.getElementById('div1');
shu(box2.getAttribute('style'));
shu(box2.getAttribute('class')); //IE不支持
shu(box2.getAttribute('className')); //IE支持,其他不支持
shu(box2.onclick); //获得属性中的事件
box2.setAttribute('title','yuan');
box2.removeAttribute("name"); //移除属性 IE6及其低版本不支持
- 层次节点:父子节点,兄弟节点
-
e.g :
var box=document.getElementById('div1');
shu(box.nodeName); //获取元素节点的标签名,和tagName一样
shu(box.nodeType); //获取元素节点的类型值
//层次节点
shu(box.childNodes); //返回元素节点的子节点列表(NodeList集合)
shu(box.childNodes[0].nodeType); //表示文本节点
shu(box.childNodes[2].nodeValue); //表示文本节点的文本内容
shu(box.childNodes[2].nodeName); //表示文本节点名称
shu(box.firstChild.nodeValue); //获取第一个子节点的文本内容
shu(box.lastChild.nodeValue); //获取最后一个子节点的文本内容
shu(box.ownerDocument); //返回文档对象
shu(box.firstChild.nextSibling.nodeName); //得到同级节点的下一个节点
shu(box.lastChild.previousSibling.nodeName); //得到同级节点的上一个节点
shu(box.attributes); //保存中这个元素节点的属性列表
shu(box.attributes.length);
shu(box.attributes[1].nodeType);
-
节点操作:
document.write('yuan'); //输出一句话,用于测试
document.createElement('p'); //创建一个节点p
box.appendChild(p); //给div1追加 子节点
等
5.DOM进阶
-
Node类型:
nodeType :
ElEMENT_NODE 元素 返回 1
.
.
.
e.g :shu(Node); //object
shu(Node.ELEMENT_NODE); //表示元素节点类型值
shu(Node.TEXT_NODE); //表示文本节点类型值
//做判断,是什么类型
//if(xxx.nodeType===Node.ELEMENT_NODE){}
- document 类型
-
e.g :
shu(document.nodeType); //文档根,nodeType:节点类型值:9
shu(document.title);//标题
shu(document.URL);//当前域名
shu(document.domain); //获得当前域名
shu(document.refer); //获取上一个域名地址
shu(document.links); //获得a标签的href地址
- Text类型
-
e.g :
window.onload=function(){
var box=document.getElementById('div1');
//body宽度
shu(document.body.clientWidth);
//呈现方式:可以设置锚点
document.getElementById('div1').scrollIntoView();
//忽略掉空白节点
shu(box.children.length);
//判断子节点
shu(box.contains(box.firstChild));//判断box不是不p的父节点
//获取文本,直接过滤掉了html
shu(box.innerText);
//获取内容,不过滤html(最常用)
shu(box.innerHTML);
//类似的还有outerHTML() 和 outerText() 会将元素抹去
};
6.DOM操作表格及样式
- 操作表格:
-
e.g :DOM建立表格
window.onload=function(){
var table=document.createElement('table');
table.border=1;
table.width=400;
var caption=document.createElement('caption');
table.appendChild(caption);
caption.innerHTML='班级表';
var thead=document.createElement('thead');
table.appendChild(thead);
var tr=document.createElement('tr');
thead.appendChild(tr);
var th=document.createElement('th');
tr.appendChild(th);
th.innerHTML='班级';
var th1=document.createElement('th');
tr.appendChild(th1);
th1.innerHTML='姓名';
var th2=document.createElement('th');
tr.appendChild(th2);
th2.innerHTML='年龄';
document.body.appendChild(table);
};
- 用DOM来创建表格十分繁琐,故用HTMLDOM来操作表格,见参考手册!
- 样式1:
-
e.g : //对浏览器检测对css的能力检测
shu(document.implementation.hasFeature('CSS','2.0'));
//获取行内的css样式,内联或链接的获取不到
var box=document.getElementById('div1');
shu(box.style)
shu(box.style.fontSize);
box.style.fontSize='80px';
- DOM样式:css和getBoundingClientRect()方法
-
e.g :
window.onload=function(){
var box=document.getElementById('div1');
//获得元素的实际大小,默认为px,内边距和滚动条会影响大小
shu(box.clientWidth);
shu(box.clientHeight);
//元素滚动实际大小
shu(box.scrollWidth);
shu(box.scrollHeight);
//获得元素的实际大小,比较稳定
shu(box.offsetWidth);
shu(box.offsetHeight);
//获取元素周边大小
shu(box.offsetLeft);
shu(box.offsetTop);
var box=document.getElementById('div1');
//获得元素的大小等信息:获得的是一个矩形对象,常用
shu(box.getBoundingClientRect());
};
7.动态加载脚本和样式
- 当网站需求变大,脚本的需求也逐步变大,就需要动态加载脚本了。
-
e.g :
window.onload=function(){
//动态加载,需要时间
onloadScript('js/demo1.js');
//延迟2s测试
setTimeout(function(){
shu(demoTest().name);
},2000);
};
function onloadScript(url){
var script= document.createElement('script');
script.type='text/javascript';
script.src=url;
document.head.appendChild(script);
}