HTML5基础知识整理(二)—— 新特性

HTML5新特性的浏览器支持情况

http://www.caniuse.com/#index


新的选择器

querySelector:返回指定元素节点的子树中匹配选择器的集合中的第一个元素,如果没有匹配返回null。 
querySelectorAll:按文档顺序返回指定元素节点的子树中匹配选择器的元素集合,如果没有匹配返回空集合。
getElementsByClassName:取得DOM中class的集合。


获取class列表属性

classList   可以参考http://www.zhangxinxu.com/wordpress/2013/07/domtokenlist-html5-dom-classlist-%E7%B1%BB%E5%90%8D/

  • length 属性,表示元素类名的个数,只读

  • item() 支持一个参数,为类名的索引,返回对应的类名。例如:
<pre name="code" class="html" style="text-align: justify;">window.onload = function(){	
	var oDiv = document.getElementById('div1');
	console.log(oDiv.classList.item(0));  // box1
<pre name="code" class="html">        console.log<span style="font-family: Arial, Helvetica, sans-serif;">( oDiv.classList.length );        //3</span>
};
 
 
 
 
<body class="a b c"> 
<div id="div1" class="box1 box2 box3">aaaa</div>
<div id="div2" class="box4 box5 box6">aaaa</div>
</body>

  • add() 支持一个类名字符串参数。表示往类名列表中新增一个类名;如果之前类名存在,则添加忽略。
<pre name="code" class="html">oDiv.classList.add('box3');
 
不论是否添加成功,此函数方法执行的返回值是undefined, 因此,classListadd()方法是无法级联的。下面的remove()方法也是如此。
  • remove() 支持一个类名字符串参数。表示往类名列表中移除该类名。例如:
oDiv.classList.remove('box3');
有点对应于jQuery中的removeClass()方法,然后者返回包装器对象本身,可级联;这里的remove()方法返回undefined,不可级联。

  • toggle() 支持一个类名字符串参数。无则加勉,有则移除之意。若类名列表中有此类名,移除之,并返回false; 如果没有,则添加该类名,并返回true.
部分现代浏览器,例如Chrome浏览器以及Firefox 24的toggle()方法已经支持第2个参数,.toggle(token, switch). 其中参数switch为Boolean类型值,如果为true表示添加,如果为false则表示移除。并返回该Boolean值。
  • contains() 支持一个类名字符串参数。表示往类名列表中是否包含该类名。有点对应jQuery中的hasClass方法,注意,这里的是contains而不是contain,后面有个s哦!

    返回值很易懂的。如果包含,则返回true, 不包含,则false. 例如:

<pre code_snippet_id="474547" snippet_file_name="blog_20140924_5_537188" name="code" class="html" style="text-align: justify;">oDiv<span style="font-family: 'Lucida Grande', Verdana, Arial, sans-serif;">.classList.contains("box3");    // false 因为"box3"上面remove掉了</span>
 
  
 
JSON的新方法
parse() : 把字符串转成json
字符串中的属性要严格的加上引号stringify() : 把json转化成字符串会自动的把双引号加上新方法与eval的区别:
eval():函数可计算某个字符串,并执行其中的的 JavaScript 代码。
JSON.parse() 可以解析json格式的数据,并且会对要解析的字符串进行格式检查,如果格式不正确则不进行解析,
而eval()则可以解析任何字符串,eval是不安全的。
新方法的应用——深度克隆新对象
详细解析:
例子1:
var a = {name : '小明'};
var b = a;   //直接将a赋值b
b.name = '小强';
alert( a.name );   // 小强
a是一个对象,直接赋值是将b的指针指向a,那么修改b的name值时,其实也修改了a的。

例子2:
var a = {name : '小明'};
var b = {};
for(var attr in a){
<span style="white-space:pre">	</span>b[attr] = a[attr];   // 属性拷贝方式
}
b.name = '小强';
alert( a.name );  // 小明
通过这种赋值方式,就避免了 例子1 中的问题。

但是如果json的数据是数组的话怎么办呢?像下面的这个例子:
例子3:
var a = {name : ['a','b']};
var b = {};
for(var attr in a){   
	b[attr] = a[attr];
}
b.name.push('c');
alert( a.name );    // a,b,c
数组也是对象。

解决方法,就用到上面提到的新的方法:
例子4:
var a = {name : ['a','b']};
var str = JSON.stringify(a);
console.log(str);  // {"name":["a","b"]}  标准格式,带引号
var b = JSON.parse(str);
b.name.push('c');
alert( a.name );   // a,b
OK ,解决啦。

如何其他浏览器做到兼容
http://www.json.org/去下载json2.js


data自定义数据


设置自定义data值:

<span style="font-size:18px;"><div id="div1" data-miaov="小明" data-miaov-all="小强">aaaaaa</div></span>


获取data值:

window.onload = function(){
	var oDiv = document.getElementById('div1');
	//alert( oDiv.dataset.miaov );	
	alert( oDiv.dataset.miaovAll );	
}; 
设置是格式为:data-name,对应获取时为:dataset.name;

设置是格式为:data-name-first,对应获取时为:dataset.nameFirst;将连字符去掉,并用驼峰式命名。

如果想删除某个自定义属性,可以用 delete oDiv.dataset.miaov ,此方法反映在DOM结构上就是没有了data-miaov这个属性;也可以用 oDiv.dataset.miaov = null;反映到DOM结构中就是 data-miaov = "null"。


传统方式:我们用attribute方法来获取和设置 data-* 自定义属性











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值