仅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 相关文章推荐
使用JavaScript构建JSON格式字符串实现步骤
Mar 22 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
Apr 02 Javascript
jquery事件与函数的使用介绍
Sep 29 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
Dec 19 Javascript
jQuery基础知识点总结(必看)
May 31 Javascript
Vuejs 组件——props数据传递的实例代码
Mar 07 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
Apr 26 Javascript
socket.io学习教程之基础介绍(一)
Apr 29 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
Aug 25 Javascript
Javascript格式化并高亮xml字符串的方法及注意事项
Aug 13 Javascript
angularjs模态框的使用代码实例
Dec 20 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
Jul 22 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
Oracle Faq(Oracle的版本)
2006/10/09 PHP
PHP实现更新中间关联表数据的两种方法
2014/09/01 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
Js+XML 操作
2006/09/20 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
Vue watch响应数据实现方法解析
2020/07/10 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
vue实现简易计算器功能
2021/01/20 Vue.js
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
Python使用QQ邮箱发送Email的方法实例
2017/02/09 Python
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
python里dict变成list实例方法
2019/06/26 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
python属于哪种语言
2020/08/16 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
2020/11/20 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
2020/11/29 Python
中学生期末评语
2014/02/03 职场文书
《雷雨》教学反思
2014/02/20 职场文书
学员自我鉴定
2014/03/19 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
2014办公室副主任四风对照检查材料思想汇报
2014/09/20 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
小学教师师德整改措施
2014/09/29 职场文书
英文升职感谢信
2015/01/23 职场文书
悬空寺导游词
2015/02/05 职场文书
再次探讨go实现无限 buffer 的 channel方法
2021/06/13 Golang
Nginx的基本概念和原理
2022/03/21 Servers