014、BOM与DOM对象的应用
Screen屏幕对象
Width:屏幕的宽度
Height:屏幕的高度
availWidth:屏幕的有效宽度(不含任务栏)
availHeight:屏幕的有效高度(不含任务栏)
colorDepth:色深
<script type="text/javascript">
//实例:测试自己显示屏幕相关信息
var str = "<h2>自己屏幕的相关信息</h2>";
str += "总宽度:"+screen.width;
str += "<br>总高度:"+screen.height;
str += "<br>有效宽度:"+screen.availWidth;
str += "<br>有效高度:"+screen.availHeight;
str += "<br>颜色色深:"+screen.colorDepth;
document.write(str);
</script>
navigator浏览器对象
appName:浏览器软件的名称
appVersion:版本号
platform:操作平台
systemLanguage:系统语言
userLanguage:用户语言
cookieEnabled:cookie是否启用。Cookie是用来记录用户账号信息
<script type="text/javascript">
//实例:当前浏览器的相关信息
var str = "<h2>当前浏览器的相关信息</h2>";
str += "浏览器名称:"+navigator.appName;
str += "<br>浏览器版本:"+navigator.appVersion;
str += "<br>操作平台:"+navigator.platform;
str += "<br>系统语言:"+navigator.systemLanguage;
str += "<br>用户语言:"+navigator.userLanguage;
str += "<br>cookie是否启用:"+navigator.cookieEnabled;
document.write(str);
//根据不同的浏览器,输出窗口的内宽
if(navigator.appName=="Netscape")
{
//Firefox浏览器
document.write("<hr>Firefox窗口的内宽是:"+window.innerWidth);
}else
{
//IE浏览器
document.write("<hr>IE窗口的内宽是:"+document.documentElement.clientWidth);
}
</script>
location地址栏对象
href:指完整的地址栏中的地址
hash:取出锚点名称
protocol:取出地址的协议
host:取出主机地址和端口号
hostname:取出主机名称
pathname:取出文件路径和文件名
search:取出查询字符串
location对应的方法
reload():刷新网页,相当于单击浏览器的“刷新按钮”
<script type="text/javascript">
var str = "<h2>location获取地址的各个部分</h2>";
str += "完整地址:"+location.href;
str += "<br>协议:"+location.protocol;
str += "<br>主机名称:"+location.hostname;
str += "<br>文件和路径:"+location.pathname;
str += "<br>查询字符串:"+location.search;
str += "<br>锚点名称:"+(location.hash ? location.hash : "不存在");
document.write(str);
</script>
</head> <body>
<h2>刷新网页,我就出来了</h2>
<input type="button" value="刷新网页" onclick="location.reload()" />
<input type="button" value="关闭窗口" onclick="window.close()" />
</body>
history对象
back():相当于浏览器的“后退”按钮
forward():相当于浏览器的“前进”按钮
go(n):跳转到哪个历史记录。N代表历史记录
go(1):相当于“前进”按钮
go(0):相当于“刷新”按钮
go(-1):相当于“后退”按钮
问题:Firefox无法正常关闭,怎么办?(有待考证)
第一步:在地址栏中输入:about:config
第二步:将选项“dom.allow_scripts_to_close_windows”的值改为“true”
Firefox通过javascript:window.close()只能关闭点击链接或新打开的窗口,不能关闭地址栏输入打开的窗口;
如果只是自己测试用,可以在地址栏中输入about:config,找到dom.allow_scripts_to_close_windows项,将其修改为true,重启Firefox。
DOM简介
W3C的DOM使用JS程序或脚本,可以动态的改变网页中元素的结构、外观和内容。
网页对应的标准:结构(XHTML)、表现(css)、行为(js)
DOM可以操作结构化的文档非常方便,结构化的文档有:html、XML。
HTML文档:具有一定的层次结构、层次关系。
HTML文档只有一个根元素(根标记),就是<html>。
HTML文档中,各元素之间是有一定层级关系。
DOM操作HTML元素,都是从根元素,一级一级的往下查找,直到找到目标元素为止。
DOM分类
核心DOM:核心DOM中的属性和方法,可以共享于HTML和XML文档。
HTML DOM:针对HTML文档的专用接口,也就是一些专用的属性和方法。
XML DOM:针对XML文档的专用接口,也就是一些专用的属性和方法。
CSS DOM :针对CSS定义的专用接口,用于JS给HTML元素增加样式或外观。
事件DOM:针对不同的浏览器,定义不同的事件模型对象。IE有自己的事件模型、Firefox也有自己的事件模型。
HTML节点树
根节点:每一个HTML文档都有肯只能一个根节点,就是<html>
子节点:某一个节点的下级节点。
父节点:某一个节点的上级节点。
兄弟节点:平级关系的两个节点,同属于同一个父节点
DOM节点类型
DOM中定义了12种节点类型,针对HTML文档的节点类型只有5个。
Document节点:文档节点。对应整个HTML文档。访问其它节点都是从Document节点开始的。
其它节点都包含在Document节点之下。
Element节点:元素节点。对应于网页中的各种标记。比如:<img>、<table>
Attribute节点:属性节点。对应于网页中各标记的属性。比如:<img src=“” />
Text节点:文本节点。对应于标记中的内容。Text节点必须是最底层节点。
Comment节点:注释节点(作个了解)
示例代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>document文档</title>
<script language="javascript">
function get_node_table(){
//因为有文档标题,所以此处应该是第二个节点
var html = document.childNodes[1];
var bodyNode = html.lastChild;
var tableNode = bodyNode.firstChild;
alert(tableNode.nodeName);
}
function get_node_tr(){
var bodyNode = document.body;
var tableNode = bodyNode.firstChild;
var tbodyNode = tableNode.firstChild;
alert(tbodyNode.childNodes[1].nodeName);
}
function edit_node_text(){
var bodyNode = document.body;
var tableNode = bodyNode.firstChild;
var tbodyNode = tableNode.firstChild;
var trNode = tbodyNode.childNodes[1];
var tdNode = trNode.childNodes[1];
tdNode.innerHTML = "<font color='red'>Demo</font>";
}
</script>
</head> <body><table width="500" border="1"><tr><th>编号</th><th>新闻标题</th></tr><tr><td>1001</td><td>DEMO</td></tr></table>
<input type="button" value="取得table节点的名称" onClick="get_node_table()" />
<input type="button" value="取得第二个tr节点名称" onClick="get_node_tr()" />
<input type="button" value="更改'DEMO'内容" onClick="edit_node_text()" />
</body>
</html>
核心DOM节点属性
核心DOM中的属性是公共属性,可以应用于HTML DOM,每一个HTML标记都继承核心DOM中的属性。
一、访问节点
nodeName:节点的名称
nodeValue:节点的值,只有Text节点才有nodeValue属性。
提示:nodeValue中内容不能增加任何的标记。nodeValue和innerHTML不一样。
innerHTML中可以加各种其它的标记
nodeValue只能输入普通文本;
firstChild:第一个子节点。
lastChild:最后一个子节点。
childNodes:子节点的列表,是一个数组。只有一个子节点,也返回一个数组。
parentNode:父节点
二、给节点增加属性、删除属性、取得某一个属性的值
setAttribute(name,value):给某一个HTML元素增加一个属性。
例如:setAttribute(“style”,”width:400;height:200px;”) //给某个标记增加行内样式
setAttribute(“src”,”images/bg.gif”) //给图片标记增加一个src属性,属性值为“images/bg.gif”
setAttribute(“id”,”result”); //给某个标记增加一个id属性,属性值为“result”
getAttribute(name):取得某个属性的值
例如: var style = document.getAttribute(“style”)
removeAttribute(name):删除指定的一个属性
例如:obj.removeAttribute(“style”);
如果访问某一个节点呢?
访问每一个节点的起始点都是Document节点对应的document对象。
<html>节点:document.firstChild
document.documentElement
<body>节点:document.body
document.firstChild.lastChild
为什么XHTML通过document.firstChil.lastChild取不到<body>节点?
核心DOM最初是给HTML4.0文档用的。
XHTML和HTML的主要区别:DTD定义。
因此,在XHTML文档中无法使用document.firstChild.lastChild这种方式访问节点。
解决办法:将DTD定义删除,恢复HTML4.0的结构。
为什么Firefox浏览器下,经常会出现,取得某一个节点,反而返回文本节点?
Firefox会把空格、换行都当成一个节点,当成一个文本节点。
解决办法:<body>和<table>之间不能有任何的空白。
实例代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
.set{border:1px solid #660066;
position:fixed;
top:50px;
right:100px; }
</style>
<script language="javascript">
function change_div_style(){
var divNode = document.getElementsByTagName('div')[0];
var style = "width:600px;margin:50px auto;border:1px solid #e7e7e7;background-color:#e2e2e2";
divNode.setAttribute("style",style);
}
function remove_div_style(){
var divNode = document.getElementsByTagName('div')[0];
divNode.removeAttribute('style');
}
function change_h2_style(){
var h2Node = document.getElementsByTagName('h2')[0];
var style = "text-align:center;color:#FF0000";
h2Node.setAttribute('style',style);
}
function remove_h2_style(){
var h2Node = document.getElementsByTagName('h2')[0];
h2Node.removeAttribute('style');
}
function change_p_style(){
var divNode = document.getElementsByTagName('div')[0];
var pNodes = divNode.childNodes;
var style = "color:#00F;";
for(var i=1;i<pNodes.length;i++){
pNodes[i].setAttribute('style',style);
}
}
function remove_p_style(){
var divNode = document.getElementsByTagName('div')[0];
var pNodes = divNode.childNodes;
for(var i=1;i<pNodes.length;i++){
pNodes[i].removeAttribute('style');
}
}
</script>
</head> <body>
<div><h2>新闻标题</h2><p>段落一</p><p>段落二</p></div>
<div class="set">
<input type="button" value="改变层的外观" onclick="change_div_style()" />
<input type="button" value="移除层的外观" onclick="remove_div_style()" /><br />
<input type="button" value="改变标题外观" onclick="change_h2_style()" />
<input type="button" value="移除标题外观" onclick="remove_h2_style()" /><br />
<input type="button" value="改变内容外观" onclick="change_p_style()" />
<input type="button" value="移除内容外观" onclick="remove_p_style()" />
</div>
</body>
</html>
三、节点的增删
createElement(tagName):创建一个HTML元素。注意:tagName不加尖括号,如:createElement(“h2”)
createTextNode(text):创建文本节点
appendChild(node):将某一个子节点追加到父节点
removeChild(node):移取某一个子节点
示例代码:(随机显示星星的数量)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
//实例:随机显示小星星
/*
分析结果:
(1)网页背景色为黑色
(2)图片大小不一样
(3)图片的坐标不一样:上下左右四个边界
(4)图片大小和坐标是随机产生的
(5)网页加载完成,开始显示星星
(6)创建星星的图片,并追加到body节点
(7)当点击某个星星时,该星星消失
(8)定时器的应用
*/
//变量初始化
var x_left = ; //窗口的左边界
var x_right = ; //窗口的右边界
var y_top = ; //窗口的顶边界
var y_bottom = ; //窗口的底边界
var img_width_max = ; //图片的最大宽
var img_width_min = ; //图片的最小宽
//初始化
function init()
{
//更改网页背景色
document.body.bgColor = "#000";
//计算右边界和底边界
x_right = window.innerWidth - img_width_max;
y_bottom = window.innerHeight - img_width_max;
//定时器
setInterval("start()",);
}
function start()
{
//求图片大小的随机值
var width = getRandom(img_width_min,img_width_max);
//求图片坐标的随机值
var x = getRandom(x_left,x_right);
var y = getRandom(y_top,y_bottom);
//创建图片
var node_img = document.createElement("img");
//给图片增加src属性
node_img.setAttribute("src","images/xingxing.gif");
//给图片增加style属性
node_img.setAttribute("style","position:absolute;top:"+y+"px;left:"+x+"px;width:"+width+"px;");
//给图片增加onclick事件属性,去调用一个函数removeImg()
node_img.setAttribute("onclick","removeImg(this)");
//将图片追加到body节点
document.body.appendChild(node_img);
}
//删除图片节点
function removeImg(obj)
{
document.body.removeChild(obj)
}
//随机数的函数
function getRandom(min,max)
{
return Math.floor(Math.random()*(max-min)+min);
}
</script>
</head> <body onload="init()">
</body>
</html>
014、BOM与DOM对象的应用的更多相关文章
- javascript的BOM,DOM对象
BOM对象 window对象 所有浏览器都支持 window 对象.概念上讲.一个html文档对应一个window对象.功能上讲: 控制浏览器窗口的.使用上讲: window对象不需要创建对象,直接使 ...
- 百万年薪python之路 -- JS的BOM与DOM对象
BOM对象 location对象 location.href 获取URL location.href="URL" // 跳转到指定页面 location.reload() 重新加载 ...
- 细看JS中的BOM、DOM对象
DOM对象模型 DOM(Document Object Model),是指文档对象模型,是W3C组织推荐的处理可扩展标志语言的 ...
- Bom和Dom对象
BOM-JavaScript是运行在浏览器中的,所以提供了一系列对象用于和浏览器窗口进行交互,这些对象主要包括window.document.location.navigator和screen等.通常 ...
- css样式的部分拓展, NuMber对象、 BoM、 DoM对象的模型的间述,ing...
css部分代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...
- 56、jsのBOM对象与DOM对象
javascript的Bom和Dom对象使我们学习的重点,这篇随笔可以重点阅读 一.BOM对象 1.window对象 所有浏览器都支持 window 对象.概念上讲.一个html文档对应一个windo ...
- 8、jsのBOM对象与DOM对象
javascript的Bom和Dom对象使我们学习的重点,这篇随笔可以重点阅读 本篇导航: BOM对象 DOM对象 DOM Event(事件) 实例练习 一.BOM对象 1.window对象 所有浏览 ...
- 【Python之路】特别篇--ECMA对象、DOM对象、BOM对象
ECMA对象 从传统意义上来说,ECMAScript 并不真正具有类.事实上,除了说明不存在类,在 ECMA-262 中根本没有出现“类”这个词. ECMAScript 定义了“对象定义”,逻辑上等价 ...
- JavaScript 参考手册——javascript本地和内置对象、BOM、DOM
本部分提供完整的 JavaScript 参考手册: JavaScript 本地对象和内置对象 Browser 对象(BOM) HTML DOM 对象 JavaScript 对象参考手册 本参考手册描述 ...
随机推荐
- java.lang.IllegalStateException: No instances available for localhost
在SpringCloud的项目中,我们使用了自动配置的OAuth2RestTemplate,RestTemplate,但是在使用这些restTemplate的时候,url必须是服务的名称,如果要调用真 ...
- bootstrap学习心得
一.html的编写规范 <!DOCTYPE html> <html lang="zh-CN"> <head> <title>Page ...
- asp.net下的cookieName
https://stackoverflow.com/questions/1017144/rename-asp-net-sessionid Add to your web.config:- <sy ...
- Vue实现仿淘宝商品详情属性选择的功能
Vue实现仿淘宝商品详情属性选择的功能 先看下效果图:(同个属性内部单选,属性与属性之间可以多选) 主要实现过程: 所使用到的数据类型是(一个大数组里面嵌套了另一个数组)具体格式如下: attrA ...
- 【POJ 1655】 Balancing Act
[题目链接] 点击打开链接 [算法] 树形DP求树的重心 [代码] #include <algorithm> #include <bitset> #include <cc ...
- Oracle 11G for redhat 自启动脚本
在$ORACLE_HOME/bin中,有dbstart和dbshut这两个脚本,可以使用这两个oracle自带的脚本实现oracle的开机自启动.这个脚本中包含oraclelistener.insta ...
- linux中vfork对打开文件的处理
vfork和fork fork()函数是拷贝一个父进程的副本,拥有独立的代码段 数据段 堆栈空间 然而vfork是共享父亲进程的代码以及代码段 vfork是可以根据需要复制父进程空间,这样很大程度的提 ...
- Linux中的gdb调试方法总结
- 腾讯视频API --关闭广告推荐
官方文档:http://v.qq.com/open/doc/tvpapi2.0.pdf 使用: <script src="http://imgcache.qq.com/tencentv ...
- sql server编写通用脚本自动统计各表数据量心得
工作过程中,如果一个数据库的表比较多,手工编写统计脚本就会比较繁琐,于是摸索出自动生成各表统计数据量脚本的通用方法,直接上代码: /* 脚本来源:https://www.cnblogs.com/zha ...