仅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 相关文章推荐
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
May 27 Javascript
Javascript基础教程之定义和调用函数
Jan 18 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
May 13 Javascript
基于JavaScript短信验证码如何实现
Jan 24 Javascript
Bootstrap组合上、下拉框简单实现代码
Mar 06 Javascript
node操作mysql数据库实例详解
Mar 17 Javascript
JS变量及其作用域
Mar 29 Javascript
浅谈JS如何实现真正的对象常量
Jun 25 Javascript
angular.js中解决跨域问题的三种方式
Jul 12 Javascript
layui之select的option叠加问题的解决方法
Mar 08 Javascript
Vue入门之animate过渡动画效果
Apr 08 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
Dec 03 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中使用redis队列操作实例代码
2013/02/07 PHP
解析php中call_user_func_array的作用
2013/06/07 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
javascript 字符 Escape,encodeURI,encodeURIComponent
2009/07/09 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
2013/11/03 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
简单介绍jsonp 使用小结
2016/01/27 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
ES6概念 Symbol toString()方法
2016/12/25 Javascript
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
浅析TypeScript 命名空间
2020/03/19 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
金讯Java笔试题目
2013/06/18 面试题
本科生个人求职自荐信
2013/09/26 职场文书
机电一体化毕业生求职信
2013/11/02 职场文书
节约电力资源的建议书
2014/03/12 职场文书
房产委托公证书
2014/04/08 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
大学生心理健康教育心得体会
2016/01/12 职场文书
交通事故协议书范本
2016/03/19 职场文书
《没有任何借口》读后感:完美的执行能力
2020/01/07 职场文书
解决Pytorch中关于model.eval的问题
2021/05/22 Python
Python OpenCV实现传统图片格式与base64转换
2021/06/13 Python
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
浅析Python中的随机采样和概率分布
2021/12/06 Python
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang