我是靠谱客的博主 优美酸奶,最近开发中收集的这篇文章主要介绍HTML5脚本扩展---新增小型API,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. H5新增选择器( SelectorsAPI )

1)      H5之前的选择器

  • document.getElementById("p1");//获取ID为p1的那个元素,返回一个元素
  • document.getElementsByTagName("p");//获取文档中所有p标签,返回一个NodeList实例
  • document.getElementsByName("check");//获取所有name为check的元素,始终返回一个NodeList实例

2)      H5新增

      querySelector(“ body / #mydiv / .selected / img .fig / [title=hello]”)

  • 参数:一个CSS选择符  “img .layer”返回类为”fig”的第一个img元素;
  • 返回:匹配到的第一个元素
  • 调用:Document类型,Element类型
  • 浏览器的兼容性:IE8+、FireFox3.5+、Safari3.1+、Chrome和Opera10+

       querySelectorAll()

  • 参数:也是一个CSS选择符
  • 返回:一个NodeList实例
  • 调用:Document类型,Element类型和DocumentFragment类型
  • 浏览器的兼容性:IE8+、FireFox3.5+、Safari3.1+、Chrome和Opera10+

       matchesSelector()

  •  参数:同样是一个CSS选择符
  • 调用:Element类型
  • 返回:若调用该方法的元素与传入方法CSS选择符参数匹配,返回true,否则返回false
  •  浏览器的兼容性: 还没有浏览器支持
  • 但IE9+通过msMatchesSelector()方法支持;
  • Firefox3.6+通过mozMatchesSelector()方法支持;
  • Safari5+ 和 Chrome通过webkitMatchesSelector()方法支持。

      document.getElementByClass(“className”)

  •  参数:一个或多个类名的字符串
  • 返回:一个NodeList实例
  • 调用:Document类型
  • 浏览器的兼容性:IE9+

      Element.classList  属性

  • 返回: 该元素的class属性值的列表,返回的列表是一个类似数组的对象,存在length属性
  • 返回的对象存在操作class值的方法:
  • add(value): 将给定的字符串value,添加class 属性列表, 若已存在,就不添加
  • remove(value): 从列表中删除value
  • toggle(value): 切换class,即:存在时删除,不存在时添加
  • contains(value): 判断列表中是否存在value
  • 浏览器的兼容性:Firefox3.6+ 和 Chrome

2. 焦点管理

 H5添加了辅助管理DOM焦点的功能。

1)document.activeElement属性,该属性引用DOM中当前获得了焦点的元素

元素获得焦点的方式:

  • 页面加载(文档刚刚加载完成时document.activeElement保存的是document.body元素的引用,文档加载期间为null
  • 用户输入
  • 在代码中调用focus()方法, 如 button.focus()

2)document.hasFocus() 方法,用于确定文档是否获得了焦点,获得了焦点时为true,否则为false

  • 通过检测文档是否获得了焦点,可以知道用户是不是正在与页面交互,提高Web应用的无障碍性
  • 浏览器兼容性:IE4+ 、Firefox 3+ 、 Safari 4+ 、Chrome和 Opera 8+

3. JSON的新方法

1)  eval(..) 函数

  • JavaScript 中的eval(..) 函数可以接受一个字符串为参数,并将其中的内容视为好像在书写时,就存在于程序中这个位置的代码。换句话说,可以在你写的代码中用程序生成代码并运行,就好像代码是写在那个位置的一样。
  • JSON新方法出现之前,使用JavaScript的eval()函数,将JSON数据结构(任何字符串代码)解析,解释并返回为JavaScript对象和数组。

      缺点

  • 存在风险,可能会执行一些恶意代码。
  • 在程序中动态生成代码的使用场景非常罕见,因为它所带来的好处无法抵消性能上的损失。

2)  JSON.parse(string)方法

  • 只能解析严格的JSON数据结构的字符串代码。安全性高

3)  JSON.stringify(obj)方法

  • 将JavaScript对象转化为字符串

4)  利用JSON的方法克隆对象

  • 修改对象的引用会直接修改对象本身,对象的多个引用访问到的数据都是一样的。

如:

var a = {
name : ”hello”
};
var b = a;
b.name = ” hi ” ; 
alert (a.name)   //输出 “hi”
 
//如何克隆一个对象,后对其修改而不影响原来的对象呢?
var a = {
name : ”hello”
};
var str = JSON.stringify(a);
var b = JSON.parse(str);
b.name = ” hi ” ; 
alert (a.name)   //输出 “hello”

对象的引用,浅拷贝,深拷贝,递归<对象的引用>

5)  IE7-不支持,想要兼容IE低版本的话,可以去JSON官网下载Json2.js文件引入本地文档使用

4. 自定义数据属性

  • HTML5规定,可以为元素添加非标准的属性,但要添加前缀 data-,目的是为元素提供与渲染无关的信息,或者提供语义信息。这些属性可以任意添加、随便命名,只要以data开头即可。
<div  id=”mydiv”  data-app=”12”  data-myname=”Lily” data-my-sex=”女” ></div>

  • 访问和设置自定义属性:
//通过元素的dataset属性,该属性返回值是DOMStringMap, 即一个名值对的映射
alert ( div.dataset.app ) ;   //输出”12”         div.dataset.app=”34”;
alert ( div.dataset.myname ) ;   //输出”Lily”    div.dataset.myname=”Jack”;
alert (div.dataset.mySex);   //输出”女”        div.dataset.mySex=”men”;  //驼峰式

  • 自定义数据属性的作用:实现HTML标签与JS的交互相分离,根据不同属性值,实现不同的效果。如:库jquery mobile, AngularJS

5. 延迟加载JS

  • 外部 JS作为body元素的最后一个标签加入HTML,不影响文档页面加载的速度
  • 如果给<script>标签添加defer=”defer”属性,则该标签引入的JS外部文件加载会延迟到onload事件触发之前完成
  • 如果给<script>标签添加async=”async”属性, JS文件会异步加载,多个JS文件都添加该属性时,执行顺序不一定,那个先加载完执行哪个,这是就会出现函数找不到的问题。
  • 一般用于JS文件之间是并行关系时使用,如加载广告
  • Labjs库:异步加载外部JS文件

6. 历史状态管理

1) 通过用户跳转页面的操作,改变历史状态管理:

  • 在现代Web应用中,用户的每次操作不一定打开一个全新的页面,因此”后退”和”前进”按钮也就失去了作用,导致用户很难在不同的状态间切换

2)在网页URL后面添加hash值参数,改变历史状态管理:

  • 如baidu.com#aaaaaaa
  • 通过window.location.hash访问和设置URL的参数列表
  • alert (window.location.hash ) //输出当前页面的参数列表 “#aaaaaaa”
  • H5新增了hashchange 事件,以便在URL的参数列表(及URL中” # ”号后面的所有字符串)发生变化时,通知开发人员。
  • 新增这个事件,是因为在Ajax应用中,开发人员经常要利用URL参数列表来保存状态或导航信息。
  • 必须把hashchange 事件绑定到window对象上。
  • 浏览器兼容性:IE8+ ,Firefox3.6+, Safari5+, Chrome和Opera10.6+

<html>
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=utf-8">
<title>无标题文档</title>
<script>
window.οnlοad= function(){
var oInput = document.getElementById('input1');
var oDiv = document.getElementById('div1');
var json = {};
oInput.onclick = function(){
           var num = Math.random();//产生0-1之间的随机数
           var arr = randomNum(35,7);//产生7个由1-35之间的整数组成的随机数
           json[num] = arr;
           oDiv.innerHTML = arr;
           window.location.hash = num;//设置当前网页网址URL的hash值
};
window.onhashchange = function(){
           oDiv.innerHTML =json[window.location.hash.substring(1)];
};
function randomNum(iAll,iNow){
           var arr = [];
           var newArr = [];
           for(var i=1;i<=iAll;i++){
                    arr.push(i);
           }
          
           for(var i=0;i<iNow;i++){
                    newArr.push( arr.splice(Math.floor(Math.random()*arr.length) ,1) );
           }
           return newArr;
}
};
</script>
</head>
 
<body>
<inputtype="button" value="随机选择"id="input1">
<divid="div1"></div>
</body>
</html>

3)   通过history对象的pushState( )方法可以创建新的历史状态,通过window的popstate事件对象的states属性可以获得作为第一个参数传递给pushState( )方法的状态对象。

replace()方法:重写当前状态,参数与pushState( )方法的前两个参数相同

  •    浏览器兼容性:Firefox4+,Safari5+, Opera11.5+和Chrome支持。
  • 在服务器环境下运行
var oDiv=document.getElementById(“div1”);
oInput.οnclick=function(){
 
   var arr=randomInt(35, 7 );
history. pushState(arr , ”” ); // 参数:数据,标题(浏览器还没有实现),地址(可选,写什么值,网址后面就会加什么值)
oDiv.innerHTML=arr;
 
}
//window对象的popstate事件
window.popstate = function(event){
    oDiv.innerHTML= event.state;
}


最后

以上就是优美酸奶为你收集整理的HTML5脚本扩展---新增小型API的全部内容,希望文章能够帮你解决HTML5脚本扩展---新增小型API所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部