HTML变动最大的版本应该就是HTML5了,这里就介绍一些 HTML5新增的DOM相关的API

与类相关的扩充

HTML4在普及后有一个十分重要的变化,即class属性使用的场景越来越多

所以HTML5新增了许多API致力于简化CSS类的用法

1. getElemenetsByClassName() 该方法接收一个参数(包含一个或多个类名的字符串),返回带有指定类名的元素的Nodelist,传入多个类名时类名的顺序没有影响

2. classList属性 该属性保存有一个 DOMTokenList 的实例

DOMTokenList 实例具有以下方法:

1. add(value)  将指定value添加到例表中,如果该value已存在则不添加

2. contains(value)返回一个布尔值用于表示列表中是否包含该value

3. remove(value) 从列表中移除value

4.toggle(value)若列表中存在value则移除value,若不存在则添加value

所以除非需要完全重写类名,一般来说在HTML5之后就已经没有必要使用 className 属性

焦点管理

HTML5也添加了辅助管理DOM焦点的功能

首先就是document.activeElement属性

该属性始终指向DOM中获得焦点的元素

文档加载期间 该属性的值为 null

除此而外 新增document.hasFocus() 方法 用于确定当前文档是否获得焦点

通过这个方法我们可以判断用户是否正在与当前页面交互

HTMLDocument变化

HTML5拓展了HTMLDocument,增加了一些新功能

1. readyState 属性  该属性有两个值 loading 正在加载文档、complete文档加载完成

2.兼容模式  即 document.compatMode属性 用于表示浏览器的渲染方式

3.head属性  通过document.head引用当前文档的head元素

字符集属性

HTML5新增了几个与文档字符集相关的属性

document.charset属性 用于表示当前文档所使用的属性

document.defaultCharset属性 用于表示当前文档的默认字符集

自定义数据属性

HTML5规定可以为元素添加非标准属性,但是需要添加前缀 data-

以上述规则添加的自定义属性,可以通过 dataset来访问自定义属性的值

如下所示

<div id = "lhy" data-date = "2019.1.30"></div>

对于上述div元素我们可以使用如下代码来访问其自定义属性

var div = document.getElementById("lhy");

var date = div.dataset.date;

插入标记

1.innerHTML属性

当我们对元素的innerHTML属性进行写操作时,innerHTML会根据写入的值创建新的DOM树

然后以这个新的DOM树替换当前元素的子节点

innerHTML也有一些限制,在大多数浏览器中使用innerHTML插入script标签其中的代码并不会被执行

除此而外大多数浏览器支持以innerHTML插入style元素,但是IE8及以下的版本中style标签属于没有作用域的元素,所以在插入style元素的时候需要在其之前插入一个有作用域的元素

如下所示

div.innerHTML = "_<style type = \"text/css\">body {background-color:red;}</style>";// 第一个下划线会在文档中插入一个文本节点
div.removeChild(div.firsChild);// 移除下划线制造的文本节点

上述方法用于在低版本IE中通过innerHTML向文档中插入元素

需要注意的是以下元素不支持 innerHTML:

<col><colgroup><framset><head><html><style><table><tbody><thead><tfoot><tr>

在IE8及以下版本的IE浏览器中<title>也没有innerHTML属性

2.outerHTML属性

与innerHTML属性的区别在于outerHTML属性包括调用元素

也就是说outerHTML会替换包括调用节点的DOM节点树

3.insertAdjacentHTML()方法

该方法接收两个参数,第一个参数只能为以下值之一

“beforebegin” 在当前元素之前(紧邻的同辈元素)插入HTML文本

“afterbegin” 在当前元素之下插入一个新的子元素,或在第一个子元素之前再插入新的子元素

“beforeend” 在当前元素之下插入一个新的子元素,或在最后一个子元素之后插入新的子元素

“afterend” 在当前元素之后(紧邻的同辈元素)插入HTML文本

第二个参数的值与innerHTMl的内容一致

scrollIntoView()

至于如何将页面滚动写入标准 HTML5选择了 scrollIntoView作为标准实现

该方法可以对所有HTML元素调用,会让调用元素出现在浏览器视口中

对该方法传入 true 或者不传入值,则浏览器会将该元素顶部尽量与视口顶部平齐

如果传入false则会让该元素尽可能完整地出现在视口中,而顶部不一定平齐

Javascript高级编程学习笔记(48)—— HTML5的更多相关文章

  1. Javascript高级编程学习笔记(67)—— 事件(11)HTML5事件

    DOM规范没有涵盖所有浏览器支持的所有事件 而许多浏览器出于满足用户需求,或解决特殊问题的目的,实现了一些自定义事件 HTML5列出了浏览器应该支持的所有事件,这里只讨论得到浏览器完善支持的事件(并非 ...

  2. Javascript高级编程学习笔记(75)—— 表单(3)表单字段

    表单字段 表单作为web应用中不可或缺的一部分,当然也是可以使用原生的 DOM 元素来访问的 除了标准的访问方式之外,每个表单都拥有一个 elements 属性,该属性保存着该表单所有 表单元素 的集 ...

  3. Javascript高级编程学习笔记(3)—— JS中的数据类型(1)

    前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...

  4. JavaScript高级编程学习笔记(第三章之一)

    继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...

  5. Javascript高级编程学习笔记(98)—— WebGL(4) WebGL上下文(2)

    错误 Javascript与WebGL之间的一个最大区别在于,WebGL的操作一般不会抛出错误 如果希望获取WebGL的错误信息,那么就需要手动调用  gl.getError() 方法 该方法会返回以 ...

  6. Javascript高级编程学习笔记(97)—— WebGL(3) WebGL上下文(1)

    WebGL上下文 在支持WebGL的浏览器中,WebGL的名字为 "experimental-webgl",这是由于 webgl 的规范仍未制定完成 制定完成后名字就会改为简单的 ...

  7. Javascript高级编程学习笔记(96)—— WebGL(2) 类型化视图

    类型化视图 类型化视图一般也被认为是一种类型化数组. 因为其元素必须是某种特定的数据类型,类型化视图都继承自 Dataview Int8Array: 表示8位二补整数(即二进制补数) Uint8Arr ...

  8. Javascript高级编程学习笔记(1)—— JS简介

    此系列文章,用于记录所学,如有错误欢迎指出. Javascript组成 1.核心(ECMAScript) 2.文档对象模型(DOM) 3.浏览器对象模型(BOM) 1.核心(ECMAScript) E ...

  9. Javascript高级编程学习笔记(57)—— 事件(1)事件流

    事件 JS与HTML的交互是通过事件实现的 而事件指的就是:文档或浏览器窗口特定的交互瞬间 可以通过侦听器来预定事件,以便在事件发生时执行相应的代码 这种模式也是设计模式中的观察者模式 事件流 有了事 ...

随机推荐

  1. JavaSE基础知识(5)—面向对象(方法的重写与重载)

    一.重写 1.说明 子类对继承过来的父类的方法进行改造,这种现象称为方法的重写或覆盖或覆写(Override) 2.要求 方法签名完全一致,jdk5.0之后,允许返回类型可以是子类类型,权限修饰符可以 ...

  2. linux 学习之路:mkdir命令使用

    linux mkdir 命令 在当前目录下创建文件夹,当前账号需要保证目录下有写到权限. 1.命令格式 mkdir[选项]文件名 mkdir  创建目录文件 语法:mkdir [ -m Mode ] ...

  3. 初学html,任务2:写一个简单的登陆/注册界面

    先在body中把最基础的标签写出来 现在页面运行出来是这样的 就是一个没有任何样式的基础界面: 接下来我们为这些标签加上样式 首先还是让页面所有元素的padding和margin都设置为0, 清除浏览 ...

  4. AngularJS入门-demo

    双向绑定测试: <body ng-app> 请输入姓名:<input ng-model="myname"> <br> {{myname}},你好 ...

  5. MVC Razor视图下ViewData传递html内容被转义

    页面输出: html源码: <div style="width: 90%; height: auto;"> <p>付凯航 阿豆 ADOU</p> ...

  6. CSS绝对定位的原点:是在border上、padding上还是在content上?

    用了那么久的绝对定位,却一直没在意一个问题,就是绝对定位的原点,究竟是在盒模型的哪一处.今天想到这个问题,直接搜索没有找到标准文档,也没有搜索到相关的问题,于是决定自己动手实现一下看看,并把这个结果发 ...

  7. app微信支付-java服务端接口 支付-查询-退款

    个人不怎么看得懂微信的文档,看了很多前辈的写法,终于调通了,在这里做一下记录. 首先来定义各种处理类(微信支付不需要特殊jar包,很多处理需要自己封装,当然也可以自己写完打个jar包) 参数要用jdo ...

  8. uni-app 顶部导航点击更换图标

    更换顶部导航的iconfont.ttf图标,先在配置文件配置好按钮: pages.json文件 "buttons": [ { "text": "\ue ...

  9. MyBatis generator配置 overwrite 文件覆盖失效

    工具:IDEA.jdk1.8.mysql 底部有解决方法! pom.xml配置 <plugins> <!--Mybatis自动代码插入--> <plugin> &l ...

  10. asp.net动态加载程序集创建指定类的实例及调用指定方法

    以下类中有三个方法: LoadAssembly:加载指定路径的程序集 GetInstance:根据Type动态获取实例,用泛型接到返回的类型 ExecuteMothod:执行实例中的指定方法 /// ...