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 相关文章推荐
使用Modello编写JavaScript类
Dec 22 Javascript
javawscript 三级菜单的实现原理
Jul 01 Javascript
javascript 面向对象编程  function是方法(函数)
Sep 17 Javascript
jQuery的一些特性和用法整理小结
Jan 13 Javascript
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
Mar 30 Javascript
用js的document.write输出的广告无阻塞加载的方法
Jun 05 Javascript
setTimeout函数的神奇使用
Feb 26 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
Jan 16 Javascript
基于Node.js实现压缩和解压缩的方法
Feb 13 Javascript
使用Angular CLI进行Build(构建)和Serve详解
Mar 24 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
Oct 20 Javascript
如何自动化部署项目?折腾服务器之旅~
Apr 16 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
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
2014/06/30 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
js根据json数据中的某一个属性来给数据分组的方法
2018/10/08 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
Javascript中window.name属性详解
2020/11/19 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
9种python web 程序的部署方式小结
2014/06/30 Python
python中的reduce内建函数使用方法指南
2014/08/31 Python
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
快速了解Python相对导入
2018/01/12 Python
python写入并获取剪切板内容的实例
2018/05/31 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
python之信息加密题目详解
2019/06/26 Python
Python处理session的方法整理
2019/08/29 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
python双向链表原理与实现方法详解
2019/12/03 Python
python构造函数init实例方法解析
2020/01/19 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
C语言面试题
2015/10/30 面试题
借款协议书
2014/04/12 职场文书
银行服务明星推荐材料
2014/05/29 职场文书
欢迎领导标语
2014/06/27 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
公司2014年度工作总结
2014/12/10 职场文书
初中家长评语和期望
2014/12/26 职场文书
新教师个人工作总结
2015/02/06 职场文书
护士求职自荐信范文
2015/03/04 职场文书