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 相关文章推荐
javascript之典型高阶函数应用介绍二
Jan 10 Javascript
利用进制转换压缩数字函数分享
Jan 02 Javascript
原生js事件的添加和删除的封装
Jul 01 Javascript
JavaScript DOM操作表格及样式
Apr 13 Javascript
微信小程序 数组中的push与concat的区别
Jan 05 Javascript
微信小程序 弹窗自定义实例代码
Mar 08 Javascript
jQuery Position方法使用和兼容性
Aug 23 jQuery
VUE element-ui 写个复用Table组件的示例代码
Nov 18 Javascript
React 无状态组件(Stateless Component) 与高阶组件
Aug 14 Javascript
微信小程序云开发 搭建一个管理小程序
May 17 Javascript
node.JS路径解析之PATH模块使用方法详解
Feb 06 Javascript
vue实现在进行增删改操作后刷新页面
Aug 05 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新手上路(二)
2006/10/09 PHP
php mail to 配置详解
2014/01/16 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
JavaScript极简入门教程(二):对象和函数
2014/10/25 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
2019/09/05 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
2020/09/21 Javascript
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
浅谈python装饰器探究与参数的领取
2017/12/01 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
Python类的继承super相关原理解析
2020/10/22 Python
python 实现全球IP归属地查询工具
2020/12/18 Python
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
C语言50道问题
2014/10/23 面试题
数控专业毕业生自荐信范文
2014/03/04 职场文书
会议接待欢迎标语
2014/10/08 职场文书
庆六一宣传标语
2014/10/08 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
技术股东合作协议书
2014/12/02 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python