仅IE支持clearAttributes/mergeAttributes方法使用介绍


Posted in Javascript onMay 04, 2012

一、.clearAttributes()

该方法用来清除所有用户定义的属性。如下

<div style="color:red;" onclick="alert(1)" data-a="a" data-b="b">Division</div> 
<script> 
var div = document.getElementsByTagName('div')[0]; 
alert(div.outerHTML); 
div.clearAttributes(); 
alert(div.outerHTML); 
</script>

运行后依次弹出如下

仅IE支持clearAttributes/mergeAttributes方法使用介绍

仅IE支持clearAttributes/mergeAttributes方法使用介绍

可以看到,第二次alert出的outerHTML已经没有了“data-a”,“data-b”,“onclick=alert(1)”属性。前两个属性是自定义的,onclick则是自有的但也清除了。

虽然outerHTML清除了,但事件并没有真正清除。点击div仍然会弹出1。(注意:对于元素自由属性如id,name,style是不会被清除的)
以上发现onclick属性在outerHTML虽然删除了,但事件handler却没有删除,点击仍然可以触发。那么通过attachEvent方式添加的事件能清除吗? 试试便知

<div>division</div> 
<script> 
var div = document.getElementsByTagName('div')[0]; 
div.attachEvent('onclick', function(){alert(1)}); 
div.clearAttributes(); 
</script>

测试发现,IE6/7/8中点击该div不会弹出1,但IE9中仍然会弹出。即IE9中不能通过clearAttributes清除attachEvent方式添加的事件handler。

二、.mergeAttributes()

该方法用来把指定元素的所有属于拷贝到自己身上,包括attributes、events、styles。如下

<div id="head" style="color:red;" onclick="alert(1)" data-a="a">Division</div> 
<p>paragraph</p> 
<script> 
var div = document.getElementsByTagName('div')[0]; 
var p = document.getElementsByTagName('p')[0]; 
alert(p.outerHTML); 
p.mergeAttributes(div); 
alert(p.outerHTML); 
</script>

拷贝前p的outerHTML

仅IE支持clearAttributes/mergeAttributes方法使用介绍

拷贝后p的outerHTML

仅IE支持clearAttributes/mergeAttributes方法使用介绍

对比就知道div的style(styles)、onclick(events)、data-a(user-defined attributes)都拷贝到p上了。现在点击p也能alert出1。

细心的同学会发现div的id没有拷贝过来。的确,在IE5之前,attributes是只读的,id/name不被合并。IE5.5后则可以通过指定第二个参数值决定是否拷贝id/name属性。

只需将mergeAttributes的第二个参数指定为false,就可以拷贝id/name了。如
p.mergeAttributes(div,false);
效果

仅IE支持clearAttributes/mergeAttributes方法使用介绍

相关:
http://msdn.microsoft.com/en-us/library/ie/ms536350%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/ie/ms536614%28v=vs.85%29.aspx

Javascript 相关文章推荐
国外Lightbox v2.03.3 最新版 下载
Oct 17 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
Jan 24 Javascript
Jquery刷新页面背景图片随机变换的实现方法
Mar 15 Javascript
js禁止页面刷新与后退的方法
Jun 08 Javascript
Jquery 全选反选实例代码
Nov 19 Javascript
AngularJS教程之MVC体系结构详解
Aug 16 Javascript
ionic实现滑动的三种方式
Aug 27 Javascript
Node.js + Redis Sorted Set实现任务队列
Sep 19 Javascript
AngularJS实现DOM元素的显示与隐藏功能
Nov 22 Javascript
详解Vue-Cli 异步加载数据的一些注意点
Aug 12 Javascript
vue.js使用3DES加密的方法示例
May 18 Javascript
vuex actions异步修改状态的实例详解
Nov 06 Javascript
js查错流程归纳
May 04 #Javascript
iphone safari不支持position fixed的解决方法
May 04 #Javascript
JavaScript之自定义类型
May 04 #Javascript
Javascript 键盘事件的组合使用实现代码
May 04 #Javascript
仿中关村在线首页弹出式广告插件(jQuery版)
May 03 #Javascript
jQuery 开发者应该注意的9个错误
May 03 #Javascript
jQuery Ajax请求状态管理器打包
May 03 #Javascript
You might like
php smarty模版引擎中的缓存应用
2009/12/11 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
使用PHP开发留言板功能
2019/11/19 PHP
JQuery中$之选择器用法介绍
2011/04/05 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
jquery实现动态添加附件功能
2018/10/23 jQuery
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
对layer弹出框中icon数字参数的说明介绍
2019/09/04 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
Python列表计数及插入实例
2014/12/17 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
python文件读写代码实例
2019/10/21 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
Python调用.net动态库实现过程解析
2020/06/05 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
临床医师专业个人自我评价范文
2013/11/07 职场文书
医学检验专业大学生求职信
2013/11/18 职场文书
男方父母证婚词
2014/01/12 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
全运会口号
2014/06/20 职场文书
公司应聘求职信
2014/06/21 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
写作之关于描写老人的好段摘抄
2019/11/14 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python