javascript中setAttribute()函数使用方法及兼容性


Posted in Javascript onJuly 19, 2015

setAttribute()函数可以设置对象的属性,如果不存在此属性,则会创建此属性。

语法结构:

el.setAttribute(name,value)

参数列表:

参数 描述
name 必需。规定要设置的属性名。
value 必需。规定要设置的属性值。

代码实例:

<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8"> 
<script type="text/javascript"> 
window.onload=function(){ 
 var mydiv=document.getElementById("mydiv"); 
 mydiv.setAttribute("id","newid"); 
 alert(mydiv.getAttribute("id")); 
} 
</script> 
</head> 
<body> 
<div id="mydiv"></div> 
</body> 
</html>

以上代码可以重新设置div的id属性值,并且弹出新设置的id属性值。
实例二:

<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<script type="text/javascript"> 
window.onload=function(){ 
 var mydiv=document.getElementById("mydiv"); 
 mydiv.setAttribute("newAttr","attrValue"); 
 alert(mydiv.getAttribute("newAttr")); 
} 
</script> 
</head> 
<body> 
 <div id="mydiv"></div> 
</body> 
</html>

以上代码可以设置div的newAttr属性值,并且弹出此属性值。这里需要特别注意的是,因为div默认并不具有newAttr属性,这个时候setAttribute()函数会首先创建此属性,然后再给它赋值。

以上两个代码实例在各主流浏览器中都能够成功的执行,但这并不说明setAttribute()函数能够兼容各个浏览器。

再看一段代码实例:

<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<style type="text/css"> 
.textcolor{ 
 font-size:18px; 
 color:red; 
} 
</style> 
<script type="text/javascript"> 
window.onload=function(){ 
 var mydiv=document.getElementById("mydiv"); 
 mydiv.setAttribute("class","textcolor"); 
} 
</script> 
</head> 
<body> 
 <div id="mydiv"></div> 
</body> 
</html>

以上代码,在标准浏览器中能够将字体大小设置为18px,字体颜色设置为红色,但是在IE6和IE7浏览器中却不能够生效。

不过依然可以使用mydiv.getAttribute("class")获取属性值"textcolor"。

也就是说在IE6或者IE7浏览器中,setAttribute()函数可以使用,但是并不是对所有的属性都有效。

下面就列举一下存在上述问题的属性:

1.class

2.for

3.cellspacing

4.cellpadding

5.tabindex

6.readonly

7.maxlength

8.rowspan

9.colspan

10.usemap

11.frameborder

12.contenteditable

13.style

为了解决上述问题就要写一个通用的跨浏览器的设置元素属性的接口方法:

dom=(function(){
var fixAttr={
 tabindex:'tabIndex',
 readonly:'readOnly',
 'for':'htmlFor',
 'class':'className',
  maxlength:'maxLength',
  cellspacing:'cellSpacing',
  cellpadding:'cellPadding',
  rowspan:'rowSpan',
  colspan:'colSpan',
  usemap:'useMap',
  frameborder:'frameBorder',
  contenteditable:'contentEditable'
 },
    
 div=document.createElement('div');
 div.setAttribute('class','t');
    
 var supportSetAttr = div.className === 't';
    
 return {
  setAttr:function(el, name, val){
  el.setAttribute(supportSetAttr ? name : (fixAttr[name] || name), val);
  },
  getAttr:function(el, name){
  return el.getAttribute(supportSetAttr ? name : (fixAttr[name] || name));
 }
}
})();

首先,标准浏览器直接使用原始属性名;其次,IE6/7非以上列举的属性仍然用原始属性名;最后这些特殊属性使用fixAttr,例如class。

那么上面的代码实例修改为以下形式即可:

<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8"> 
<style type="text/css"> 
.textcolor{ 
 font-size:18px; 
 color:red; 
} 
</style> 
<script type="text/javascript"> 
dom=(function(){ 
var fixAttr={ 
 tabindex:'tabIndex', 
 readonly:'readOnly', 
 'for':'htmlFor', 
 'class':'className', 
  maxlength:'maxLength', 
  cellspacing:'cellSpacing', 
  cellpadding:'cellPadding', 
  rowspan:'rowSpan', 
  colspan:'colSpan', 
  usemap:'useMap', 
  frameborder:'frameBorder', 
  contenteditable:'contentEditable' 
 }, 
     
 div=document.createElement('div'); 
 div.setAttribute('class','t'); 
     
 var supportSetAttr = div.className === 't'; 
     
 return { 
  setAttr:function(el, name, val){ 
  el.setAttribute(supportSetAttr ? name : (fixAttr[name] || name), val); 
  }, 
  getAttr:function(el, name){ 
  return el.getAttribute(supportSetAttr ? name : (fixAttr[name] || name)); 
 } 
} 
})(); 
window.onload=function(){ 
 var mydiv=document.getElementById("mydiv"); 
 dom.setAttr(mydiv, 'class', 'textcolor'); 
} 
</script> 
</head> 
<body> 
</body> 
</html>

以上代码可以在各主流浏览器中都有效,都可以将字体大小设置为18px,颜色设置为红色。
至于style属性可以使用el.style.color="xxx"这种形式进行兼容。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
js 日期转换成中文格式的函数
Jul 07 Javascript
JavaScript读取中文cookie时的乱码问题的解决方法
Oct 14 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
Feb 23 Javascript
15款优秀的jQuery导航菜单插件分享
Jul 19 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
Jul 18 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
Oct 29 Javascript
超精准的javascript验证身份证号的具体实现方法
Nov 18 Javascript
输入框点击时边框变色效果的实现方法
Dec 26 Javascript
JavaScript实现256色转灰度图
Feb 22 Javascript
微信小程序中实现手指缩放图片的示例代码
Mar 13 Javascript
JS实现十分钟倒计时代码实例
Oct 18 Javascript
JS中async/await实现异步调用的方法
Aug 28 Javascript
jQuery的position()方法详解
Jul 19 #Javascript
ExtJs动态生成treepanel的Json格式
Jul 19 #Javascript
javascript中mouseover、mouseout使用详解
Jul 19 #Javascript
javascript实现的简单计时器
Jul 19 #Javascript
javascript中setInterval的用法
Jul 19 #Javascript
js中跨域方法原理详解
Jul 19 #Javascript
javascript获取网页宽高方法汇总
Jul 19 #Javascript
You might like
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
2015/09/30 PHP
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
javascript 面向对象 function类
2010/05/13 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
js注入 黑客之路必备!
2016/09/14 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
jQuery中使用validate插件校验表单功能
2019/05/24 jQuery
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
pycharm永久激活超详细教程
2020/10/29 Python
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
静态成员和非静态成员的区别
2012/05/12 面试题
Python中pass语句的作用是什么
2016/06/01 面试题
求职者应聘的自我评价
2013/10/16 职场文书
学前教育学生自荐信范文
2013/12/31 职场文书
竞聘书怎么写,如何写?
2014/03/31 职场文书
党风廉设责任书
2014/04/16 职场文书
工作说明书范文
2014/05/07 职场文书
夏季药店促销方案
2014/08/22 职场文书
党员民主评议个人总结
2014/10/20 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
《观潮》教学反思
2016/02/17 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
使用jpa之动态插入与修改(重写save)
2021/11/23 Java/Android
python套接字socket通信
2022/04/01 Python
Moment的feature导致线上bug解决分析
2022/09/23 Javascript