JavaScript中property和attribute的区别详细介绍


Posted in Javascript onMarch 03, 2015

1. 定义

Property:属性,所有的HTML元素都由HTMLElement类型表示,HTMLElement类型直接继承自Element并添加了一些属性,添加的这些属性分别对应于每个HTML元素都有下面的这5个标准特性: id,title,lang,dir,className。DOM节点是一个对象,因此,他可以和其他的JavaScript对象一样添加自定义的属性以及方法。property的值可以是任何的数据类型,对大小写敏感,自定义的property不会出现在html代码中,只存在js中。

Attribute:特性,区别于property,attribute只能是字符串,大小写不敏感,出现在innerHTML中,通过类数组attributes可以罗列所有的attribute。

2. 相同之处

标准的 DOM properties 与 attributes 是同步的。公认的(非自定义的)特性会被以属性的形式添加到DOM对象中。如,id,align,style等,这时候操作property或者使用操作特性的DOM方法如getAttribute()都可以操作属性。不过传递给getAttribute()的特性名与实际的特性名相同。因此对于class的特性值获取的时候要传入“class”。

3. 不同之处

1).对于有些标准的特性的操作,getAttribute与点号(.)获取的值存在差异性。如href,src,value,style,onclick等事件处理程序。
2).href:getAttribute获取的是href的实际值,而点号获取的是完整的url,存在浏览器差异。

<script>

      var a  = document.body.children[0]

      a.href = '/'

      alert( 'attribute:' + a.getAttribute('href') ) // '/'

      alert( 'property:' + a.href )  // IE: '/', others: full URL

  </script>

src的值的获取类似href,不过IE也会返回full URL;
value值同样存在一些 ‘one-way'(单向)同步的内置属性。
例如,input.value 从 attribute 中同步(即 property 从 attribute 中获得同步)

<input type="text" value="markup">

  <script>

       var input = document.body.children[0];

       input.setAttribute('value', 'new');

       alert( input.value ); // 'new', input.value changed

       alert( input.getAtrribute(value) ); // 'new'

  </script>

但是 attribute 不能从 property 中获得同步:

<input type="text" value="markup">

   <script>

        var input = document.body.children[0];

        input.value = 'new';

        alert(input.getAttribute('value'));  // 'markup', not changed!

  </script>

getAttribute获取的是初始值,而点号获取的是初始值或者.value修改后的值,例如当访问者输入了某些字符后,'value' attribute 在 property 更新后维持了原始值。原始值可以用来检验 input 是否变化,或者重置它。

对于style和onclick等事件处理程序,getAttribute方法访问时会返回字符串,而点号返回的是相应的对象和事件处理函数。

对于input中的checked属性

<script>

    var input  = document.body.children[0]

    alert( input.checked ) // true

    alert( input.getAttribute('checked') ) // empty string

  </script>

getAttribute获取的是你是实际设置的值。而点号返回的是布尔值。

浏览器兼容性上的差别

1.在IE<9的浏览器中,可以用点号和getAttribute在相互之间访问自定义属性。
2.IE<8(包括IE8种的IE7兼容模式),property和attribute相同。因为attribute对大小写不敏感,在这种情况下,用getAttribute访问特性的时候,浏览器会选择第一次出现的值。

document.body.abba = 1 // assign property (now can read it by getAttribute)

document.body.ABBA = 5 // assign property with another case

// must get a property named 'ABba' in case-insensitive way.

alert( document.body.getAttribute('ABba') ) // 1

优先选择property

在实际应用中,98%的 DOM 操作都是使用 properties。
只有两种情形需要使用attributes

1.自定义 HTML attributes,因为它并不同步到DOM property。
2.访问内置的 HTML attributes,这些 attribute 不能从 property 同步过来。例如 INPUT标签的value值。

Javascript 相关文章推荐
完整显示当前日期和时间的JS代码
Sep 17 Javascript
javascript html 静态页面传参数
Apr 10 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
Aug 09 Javascript
javascript中定义私有方法说明(private method)
Jan 27 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
Mar 18 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
May 04 Javascript
Angularjs中UI Router的使用方法
May 14 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
Feb 20 Javascript
Vue from-validate 表单验证的示例代码
Sep 26 Javascript
vue2过滤器模糊查询方法
Sep 16 Javascript
JS实现音乐导航特效
Jan 06 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
Jul 11 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
Mar 02 #Javascript
JS上传图片前实现图片预览效果的方法
Mar 02 #Javascript
JS控制弹出新页面窗口位置和大小的方法
Mar 02 #Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
Mar 02 #Javascript
JS实现的网页倒计时数字时钟效果
Mar 02 #Javascript
js实现在网页上简单显示时间的方法
Mar 02 #Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
Mar 02 #Javascript
You might like
PHP第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
2017/07/07 Javascript
Angularjs单选框相关的示例代码
2017/08/17 Javascript
详解Angularjs 自定义指令中的数据绑定
2018/07/19 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
意外死亡赔偿协议书
2014/10/14 职场文书
办公用品管理制度
2015/08/04 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
zabbix监控mysql的实例方法
2021/06/02 MySQL
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android
React 高阶组件HOC用法归纳
2021/06/13 Javascript
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python
Python实现文字pdf转换图片pdf效果
2022/04/03 Python
python开发人人对战的五子棋小游戏
2022/05/02 Python