DOMStringMap类型——HTML5新特性dataset的类型哦

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript" src="js/jquery-1.11.0.js" ></script>
	</head>
	<body>
		<div id="div" data-raw="raw">111111111</div>
	</body>
	<script>
		 var $el = $('#div');
		 var el = $el[0];
		function log(name){
			console.log($el.data(name));
            console.log(el.dataset[name]);
            console.log(el.outerHTML);
             console.log("-------------------------------------");
		}
		$el.data('raw','$');
		log('raw');
		$el.data('raw','raw');
		log('raw');
		el.dataset.raw='dataset';
		log('raw');
		el.dataset.raw = 'raw';
		log('raw');
		//delete el.dataset.raw;
		//log(raw);
		el.dataset.newRaw = 'newRaw';
		log('newRaw');
		var obj = {"level":1,"birthday":2};
		$el.data("obj",obj);
		console.log($el.data('obj')['level']);
		
	</script>
</html>

 IE11开始支持 HTML5 JS API的dataset,它是就专门用来操作自定义特性(custom attribute,属性的分类请看《 JS魔法堂:特性、属性,傻傻分不清楚》)的对象,其类型为DOMStringMap,从名称可知其为字符串字典。下面结合dataset说明其特点吧,具体如下:

  ①. dataset针对以"data-"开头的自定义特性操作;

  ②. 通过形如dataset.rawData获取data-raw-data的属性值;

  ③. 通过形如dataset.rawData = 'hello world!'给data-raw-data的属性赋值;

  ④. 通过形如delete dataset.rawData删除属性data-raw-data;

  ⑤. 通过for in 遍历dataset的属性;

  ⑥. 属性值必须或将自动转换为String类型;

  ⑦. 其实它就是除了setAttribute、getAttribute等操作自定义特性的另一个接口而已,而且效率比get/setAttribute低,但大大简化操作代码。


  另外,JQuery中也有一个data函数,那么它跟以"data-"开头的自定义特性有什么关联呢?


 从上面的实例可知:

    调用JQuery的data函数访问属性时,它会在库内部的特性映射表中寻找同属性名的键值对,没有则采取与dataset相同的方式获取属性值,若成功则将在特性映射表中新建一个键值对,然后后续的访问和赋值操作均仅仅针对该键值对。赋值操作时,仅仅在特性映射表中新建键值对,并不会赋值到标签对应的"data-*"特性中

    为何JQuery要设计成这样呢?因为dataset的自定义特性值必须为String类型,赋予其他类型时会发生隐式类型转换,不便于暂存对象、数组等数据。JQuery这种算是折中的做法吧,所以用JQuery的data API操作自定义特性时最好不要跟dataset或get/setAttribute等原生API混合用咯。


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值