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 存在陷阱 删除某一区域所有节点
May 10 Javascript
JS 树形递归实例代码
May 18 Javascript
js跨域问题之跨域iframe自适应大小实现代码
Jul 17 Javascript
javascript 拖动表格行实现代码
May 05 Javascript
js继承call()和apply()方法总结
Dec 08 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
Aug 19 Javascript
JavaScript寄生组合式继承实例详解
Jan 06 Javascript
vue如何进行动画的封装
Sep 26 Javascript
Vue父子组件之间的通信实例详解
Sep 28 Javascript
vuex如何重置所有state(可定制)
Jan 17 Javascript
Node.js 多进程处理CPU密集任务的实现
May 26 Javascript
vue 组件开发原理与实现方法详解
Nov 29 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 set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
解析php获取字符串的编码格式的方法(函数)
2013/06/21 PHP
Thinkphp实现MySQL读写分离操作示例
2014/06/25 PHP
php回调函数处理数组操作示例
2020/04/13 PHP
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
python使用循环实现批量创建文件夹示例
2014/03/25 Python
Python之eval()函数危险性浅析
2014/07/03 Python
Python使用matplotlib实现在坐标系中画一个矩形的方法
2015/05/20 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
Python实现Linux中的du命令
2017/06/12 Python
Python实现将文本生成二维码的方法示例
2017/07/18 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
使用python3构建文件传输的方法
2019/02/13 Python
超实用的 30 段 Python 案例
2019/10/10 Python
python中对_init_的理解及实例解析
2019/10/11 Python
自学python用什么系统好
2020/06/23 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
易程科技软件测试笔试
2013/03/24 面试题
小学生获奖感言范文
2014/02/02 职场文书
兰兰过桥教学反思
2014/02/08 职场文书
迎元旦广播稿
2014/02/22 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL
MySQL数字类型自增的坑
2021/05/07 MySQL
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python