html5 dom 结构,JavaScript的组成结构梳理

JavaScript经历了残酷的竞争,至今已经统治了web世界,现在系统梳理一下相关的知识。

JavaScript可以分为三部分:ECMAScript、DOM和BOM。

一、ECMAScript是JavaScript的核心,规定了这门语言的数据、语法、结构等基本概念。

Global是ECMAScript最顶级的对象(兜底对象),但体现在代码中它是不存在的。在JavaScript脚本中使用此对象,会报错(not defined),但是ECMAScript规定Number、Boolean、Object、NaN、Math等对象都是Global对象的属性,对应的语法在此不做展开。

二、DOM是文档对象模型,是ECMAScript操作HTML的API。

DOM

DOM使用节点来把HTML以及XML文档描述成一个多层次的节点结构。

节点具有的通用属性和方法:nodeType nodeName nodeValue childNodes parentNode previousSibling nextSibling fistChild lastChild ownerDocument ||方法 hasChildNodes() appendChild() insertBefore() replaceChild() cloneNode()

常用的节点类型:Document(9)、Element(1)、Text(3)、Doctype(10)类型。

Document类型:document对象是其实例对象,是window的属性,表示整个HTML页面。

document对象的特有属性:documentElement(html节点) body(body节点) title URL(当前地址栏显示的url) domain(当前页面的域名) referrer(连接到当前页面的url)

document对象特有方法:getElementById() getElementByTagName() getElementByName(含有name属性值)

Element类型:所有的常用标签,、

等标签。

特殊属性和方法:id、class等,getAttribute() setAttribute() removeAttribute() createElement()--创建一个元素节点。

Text类型:表示可以按字面意思解释的纯文本内容,可以是转义后的HTML字符,不能包含HTML代码。

特殊属性和方法:createTextNode() normalize()--去除空的文本节点以及合并两个相邻的文本节点 splitText(num)--将一个文本节点按照传入的位置值分隔成两个文本节点

DOM的扩展:(SelectorsAPI和HTML5两部分)

SelectorsAPI部分

querySelector()和querySelectorAll()方法:Document和Element类型节点调用。

eg.var target = document.querySelector('.abc/#abc/div');//querySelectorAll()得到的是集合。

HTML5部分

getElementsByClassName()方法、scrollIntoView()方法(相当于锚点定位)

DOM2和DOM3(在DOM1基础上引入了更多的交互能力):

DOM2级样式部分

①通过style对象访问css属性(通过style标签在HTML中定义的属性),属性含中划线改为驼峰

document.getElementById("abc").style.width = "100px";

document.getElementById("abc").style.backgroundColor = "red";

②cssText属性:设置多项属性变化最快捷的方式

document.getElementById("abc").style.cssText = "width: 10px; height: 20px; color: red;……"

③getComputedStyle()方法:(三种定义方式)计算后的样式的取值

var testItem = document.getElementById("abc")

document.defaultView.getComputedStyle("testItem").width//只读属性,不可更改设置。

④元素大小

偏移量:offsetHeight(元素可见高度+上下边框高度+水平滚动条宽度)、offsetWidth、offsetLeft(元素左边框距离其父元素的距离)、offsetRight【都为只读属性,每次访问重新计算】

客户区大小:clientWidth(元素内容宽度+左右边框宽度)、clientHeight【都为只读属性,每次访问重新计算】

滚动大小:scrollHeight(元素可见+滚动掉的+隐藏掉的的高度)、scrollWidth、scrollLeft(向左滚动掉的距离)、scrollTop

getBoundingClientRect()方法:该方法返回一个对象,包含四个属性left、right、top、bottom,表示相对视口的位置(当前浏览器时候的左上角为(0,0))

DOM2级遍历

NodeIterator类型和TreeWalker类型

document.createNodeIterator(root, whatToShow, filter, false)方法创建NodeIterator实例,其中root为遍历的起点,whatToShow为显示的节点类型(特定值),filter为显示节点的过滤器函数(自定义),最后一个参数可忽略。

NodeIterator类型有个方法:nextNode()和previousNode(),表示深度遍历的方向(向前、向后)

遍历的过程:从给定的root根节点开始遍历,由以上两种方法确定方向向下遍历。

Hello world!

  • list item 1
  • list item 2
  • list item 3

//想要遍历div元素中的所有元素

var testItem = document.getElementById("test");

var iterator = document.createNodeIterator(testItem, NodeFilter.SHOW_ELEMENT, null, false);

var node = iterator.nextNode();

while(node!=null){

alert(node.tagName);

node = iterator.nextNode();

}

//输入 DIV P B UL LI LI LI

//若只想输出li标签,可通过定义过滤器函数实现

var filter = function(node) {

return node.tagName.toLowerCase() == 'li'? NodeFilter.FILTER_ACCEPT: NodeFilter.FILTER_SKIP;

}

//NodeFilter.FILTER_ACCEPT表示接受该节点,NodeFilter.FILTER_SKIP表示跳过该节点

TreeWalker类型包含了NodeIterator类型的功能,更强大的是遍历方向的多样性

parentNode()、firstChild()、lastChild()、nextSibling()、previousSibling()

过滤器的属性,增加一个NodeFilter.FILTER_REJECT表示跳过该节点包括该节点的整个子树。

DOM2范围控制(略)

DOM事件(JavaScript与HTML交互的桥梁)

DOM2级事件规定:事件流---事件捕获阶段->目标阶段-->事件冒泡阶段(可在一、三阶段操作事件)

事件处理程序:

①HTML事件处理程序:

function sayHi(){

alert("hellow world")

}

//缺点,js和HTML耦合度高,加载HTML代码时js代码未加载(时差),作用域可能不同

②DOM0级事件处理程序:

var testItem = document.getElementById("test");

testItem.onclick = function() {

alert("hellow world")

};

//移除事件处理程序 testItem.onclick = null;

③DOM2级事件处理程序:

testItem.addEventListener("click", function(){

alert("hellow world")

},false);

//三参true表示捕获阶段处理事件,false冒泡阶段处理,通过removeEventListener()移除事(仅限命名函数)

IE事件处理程序:

testItem.attachEvent("onclick", function(){});

事件对象(event对象)

触发某个DOM事件时,会产生一个event对象,里面记录着所有与事件有关的信息。

event常用属性:currentTarget(当前元素)、target(事件目标)==>无事件委托时currentTarget=target=this,发生委托时==>currentTarget=this=事件注册元素(一般父元素),target=事件目标元素(子元素)

阻止特定事件的默认行为:在event.cancelable == true时,用event.preventDefault()方法

阻止事件的冒泡行为:事先查看event.bubbles == true,表示支持冒泡,用event.stopPropagation()。

事件类型(待续)

①window对象下的整体事件:

load(可发生在img、script标签上,主要发生在window对喜爱那个上)、unload、resize、scroll

②焦点事件:blur、focus(均不支持冒泡)

③鼠标和滚轮事件:

9个鼠标事件mousedown、mouseup、click、dbclick、mouseenter、mouseover、mouseleave、mouseout、mousemove,一个滚轮事件mousewheel。

鼠标的位置信息:event中的clientX、clientY确定鼠标的视窗位置,pageX,pageY确定鼠标的页面位置(包含发生滚动的部分),screenX、screenY确定鼠标的物理屏幕位置。

click事件过程:mousedown->mouseup->click

dbclick事件过程:mousedown->mouseup->click->mousedown->mouseup->dbclick

Android和iOS设备:不支持dbclick事件,轻击触发mousemove事件。

无障碍性(略)

④键盘事件

keydown(按任意键触发),keypress(按任意可影响输入字符键触发)、keyup(释放按键触发)--以上可取到哦输入的键码,如ASCII码。

textInput事件:相当于keypress事件,不同的是前者需可编辑区域触发,后者焦点事件触发,前者需实际字符键触发,后者删除键也可以,对象中有data属性,保存输入的字符的字符串表示。

⑤触摸和手势事件

触摸事件:touchstart、touchmove(手指滑动时触发,此事件默认滚动,可在此阻止滚动事件-preventDefault())、touchend.

在移动端触摸屏幕发生的事件依次为:touchstart->mouseover->mousemove->mousedown->mouseup->click->touchend.

手势事件:两只手指触摸屏幕时(同一元素)会产生手势,gesturestart(一个手指在屏幕上,另一只手指触屏时发生)、gesturechange(两只手指在屏幕上,任何一个手指移动时触发)、gestureend(任何一个手指从屏幕移开时触发)

事件委托:基于事件的冒泡机制,把子元素的事件委托给上级元素处理,减少了冗余代码,增强了页面性能。(对一类事件最少可定义一次,例如整个文档在最外层定义一个click事件)

三、BOM是浏览器对象模型,是ECMAScript操作浏览器的API。

window是BOM的核心对象,表示一个浏览器实例。它还充当着ECMAScript中的Global对象,因此网页中定义的变量、对象、函数等都是它的属性。

window对象浏览器相关的属性和方法:

screenLeft和screenTop表示窗口相对屏幕的位置(moveTo()和moveBy()表示移动窗口的方法)。

innerWidth和innerHeight表示视窗的大小(resizeTo()和resizeBy()表示改变视窗的方法)。

open()和close()方法表示打开和关闭某一URL的方法。

setTimeout()和setInterval()表示延时调用和间歇调用方法(毫秒数表示此毫秒后将任务添加到任务队列)。

alert()、confirm()和prompt()为系统弹出提示框方法。

对象:

location对象:是window的属性,也是document的属性,即为应用同一属性。

https://test.com.cn:8080/search/#info?wd=javascript(protocol「https:」、host「test.com.cn:8080」、hostname「test.com.cn」、port『8080』、pathname「search」、hash『info』、search「?wd=javascript」、href『完整url』和assign()、replace()、reload(),八个属性三个方法)。

navigation对象:记录浏览器相关参数。

screen对象:记录显示器相关参数。

history对象:go()、back()、forward()方法。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值