实现JavaScript的组成----BOM和DOM详解


Posted in Javascript onMay 18, 2016

我们知道,一个完整的JavaScript的实现,需要由三部分组成:ECMAScript(核心),BOM(浏览器对象模型),DOM(文档对象模型)。

今天主要学习BOM和DOM。

BOM:

BOM提供了很多对象,用来访问浏览器的功能,这些功能于网页内容无关(这些是DOM的事),目前,BOM已经被W3C搬入了HTML5规范中。

window对象:

BOM的core,表示浏览器的一个实例,它既是通过javascript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象,这意味着在网页中定义的任何一个对象,变量和函数,都已window作为其Global对象,因此有权访问paresinInt()等方法。(摘自高程三)。此外,如果一个网页中包含框架,则每个框架都拥有自己的window对象,并且保存在frames集合中(索引0开始,ltr,ttb)。

首先,全局执行环境中的变量,函数都是window对象的属型和方法。当然,全局变量与直接定义的window属型有一点差异,全局变量(准确的说应该是显式声明的全局变量)无法使用delete,而window属性就可以。此外,还有一个细节需要注意,尝试访问未声明的变量会出错,但是使用查询window对象就没有问题。

那么,window有哪些常见的属性或者方法呢?

1.name,每个window对象都有name属性,包含框架的名称。通常是为了了解窗口关系与框架。

2.窗口位置方法:moveTo(新位置的x坐标,新位置的y坐标),moveBy(水平移动x,垂直移动y)。这两个方法不适用框架。

3.窗口大小属性:innerWidth/Height(视图区(减去边框的宽度)的大小/* IE,Safari,firefox */),outerWidth/Height(返回浏览器窗口的大小/*IE,Safari,firefox */).在Chrome中,inner,outer均返回视图区的大小。

当然,可以通过resizeTo(新窗口width,新窗口height),resizeBy(比原宽度提高x,比原高度提高y)来改变窗口大小。这恋歌方法不适用框架结构。

4.window.open(URL,窗口目标,特性字符串,新页面是否取代浏览器历史纪录中当前加载页面的boolean)用于导航到一个特定的url或者打开一个新的窗口。如果指定窗口目标,且窗口目标是已有的窗口或者框架的名称,那么就会在有改名成的窗口或者框架中加载指定的url。否则,就将打开的新窗口命名为目标窗口。当然,窗口目标可以指定的关键字有_self,_parent,_top,_blank。

<a href=https://3water.com>click me</a>
  <script>
    var link=document.getElementsByTagName("a")[0];
      alert(link.nodeName);   
     window.onload=function(){
      
      link.onclick=function () {
        window.open(link.href,"good","width=400px,height=300px");
        return false;
    
      }  
    }

</script

此处特性字符串的具体设置不再赘述,有兴趣的可以点击此处

5.作为一门单线程语言,js仍然允许设置超时值(指定的事件过后执行代码)和间歇时间值(每隔指定的时间循环一次)来调度代码在特定的时刻执行。

超时调用:setTimeout(js代码字符串,毫秒时间),作为一个单线程语言,js的任务队列每次只能执行一段代码,若经过设置的时间间隔过后任务队列为空,则执行代码字符串,否则,要等到前面的代码执行完成后再执行。

var al=setTimeout(function () {
      alert("good");
    },5000);
    alert(al); //2

此处,我在5秒后调用了一个匿名函数输出good,窗口先弹出一个警示框显示2,可见setTimeout()函数返回的是一个数值ID,具有唯一性,那么我们就可以通过这个ID来清除超时调用,可以使用clearTimeout(ID)来清除。

间接调用:setInterval(),他接受的参数与setTimeout()相同,同样返回一个数值ID,使用clearTimeout()清除。

6.系统对话框方法:alert(),confirm(),prompt()等在我前面的博客中有写道,点击这里

location对象

与其说是BOM中的对象,不如说Location是window对象中的一个属性,当然,也是后面要讲的DOM中document对象的属性,也就是说,window.location和document.location引用同一个对象。

location对象属性列表,修改这些属性可以加载新的页面,且会在历史记录中生成新的纪录。使用location.replace()则不会再历史纪录中生成新纪录。

hash "#contents" 返回url中的hash,没有为“”
host "www.google.com" 返回服务器名和端口号(如果有)
hostname "www.google.com" 返回不带端口号的服务器名称
href "www.google.com" 返回当前页面的完整url,调用了assign()
pathname ''/wileyCDA/' 返回目录名称
port "8080" 返回端口号,没有则返回空字符串
protocol "http:" 返回页面使用的协议
search "?=javascript" 返回查询字符串,以问号开头

navigator对象:用于识别浏览器的事实标准,其属性和方法主要用于检测浏览器的类型。

其余的如history对象(保存历史纪录),screen对象(表明客户端能力),由于在js中编程作用不大,便不再赘述。

------------------------------------------------------------------------------

DOM:

DOM是基于XML后经过扩展用于HTML的API,DOM依靠节点树展开。 

首先需要明确一点,文档节点是每个节点的根节点,文档节点有且只有一个子节点既元素html(文档元素)。

Node类型:

DOM1中的一个接口,由DOM所有节点类型(文本节点,属性节点,元素节点)实现,该接口在js中作为Node类型实现。

nodeType属性,每个节点都拥有。由12个数值表示,element--1,attribute--2,text--3......

nodeName属性,对于元素节点,nodeName的值为标签名。

nodeValue属性,对于元素节点,nodeValue的值为null。

节点关系:每个节点都拥有childNodes属性,保存NodeList(类数组对象)对象。每个节点都拥有parentNode属性,指向父节点。在childNodes中的节点拥有相同的parentNode。使用previousSibling和nextSibling属性可以访问兄弟节点。同时childNodes[0]==firstChild,childNodes[childNodes.length-1]==lastChild.

操作节点:appendChild(),向NodeList末尾push一个节点,返回新增的节点。insertBefore(),向NodeList首部unshift一个节点,返回新增节点。replaceChild(newChild,targetChild),替换目标节点,原节点仍在文档中,但已经没有位置。removeChild(tragetChild),移除节点,与replaceChild()的效果类似。cloneChild(boolean),true时表示完全复制(整个节点与子节点),false表示基本复制。

Document类型:

表示文档,document对象是HTMLDDocument(继承自Document类型)的实例,表示整个html页面。同时,doument对象也是window对象的一个属性,因此可以作为全局对象访问。document.firstChild==html. document.body==body. document.doctype--->对<!DOCTYPE>的引用。doucment.title--->title  document.url--->location.url.

查找元素:getElementById(),getElementsByTagName(),getElementsByClassName().

文档写入:write(),writeln(),open(),close()

Element类型:

getAttribute(),获取特性 对于class,则使用“class”,而不是className,在使用element.className时可以获取class特性。

setAttribute(),设置特性,若特性存在,则替换。否则,创建。

removeAttribute(),彻底删除元素特性。

createElement(),创建新元素。

Text类型:

createTextNode(),创建文本节点,如果连个文本节点是相邻同胞节点,则这个两个文本会连接起来,没有空格。

以上这篇实现JavaScript的组成----BOM和DOM详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
Feb 26 Javascript
javascript检测浏览器flash版本的实现代码
Dec 06 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
Jun 06 Javascript
JavaScript的null和undefined区别示例介绍
Sep 15 Javascript
JS实现禁止鼠标右键的功能
Oct 15 Javascript
jquery结合html实现中英文页面切换
Nov 29 Javascript
COM组件中调用JavaScript函数详解及实例
Feb 23 Javascript
angularjs指令之绑定策略(@、=、&amp;)
Apr 13 Javascript
Js利用Canvas实现图片压缩功能
Sep 13 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
Aug 19 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
Aug 22 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
May 05 Javascript
深入理解JQuery中的事件与动画
May 18 #Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
May 18 #Javascript
jQuery添加options点击事件并传值实例代码
May 18 #Javascript
详解JavaScript实现设计模式中的适配器模式的方法
May 18 #Javascript
深入剖析javascript中的exec与match方法
May 18 #Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
May 18 #Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
May 18 #Javascript
You might like
php 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
PHP MySQL应用中使用XOR运算加密算法分享
2011/08/28 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
微信小程序 按钮滑动的实现方法
2017/09/27 Javascript
详解React之父子组件传递和其它一些要点
2018/06/25 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
Python实现感知器模型、两层神经网络
2017/12/19 Python
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
详解python实现交叉验证法与留出法
2019/07/11 Python
django之自定义软删除Model的方法
2019/08/14 Python
Python Web框架之Django框架Model基础详解
2019/08/16 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
Django的CVB实例详解
2020/02/10 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
总结html5自定义属性有哪些
2020/04/01 HTML / CSS
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
工程业务员工作职责
2013/12/07 职场文书
办公室岗位职责
2014/02/12 职场文书
2014入党积极分子破除“四风”思想汇报
2014/09/14 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
2014年节能工作总结
2014/12/18 职场文书
2015年小学数学教师个人工作总结
2015/05/25 职场文书
2015年度学校应急管理工作总结
2015/10/22 职场文书
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android