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编程起步(第七课)
Feb 27 Javascript
Jquery 实现Tab效果 思路是js思路
Mar 02 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
Mar 05 Javascript
JavaScript中Math对象方法使用概述
Jan 02 Javascript
javascript函数中参数传递问题示例探讨
Jul 31 Javascript
跟我学习javascript的prototype使用注意事项
Nov 17 Javascript
javascript绘制漂亮的心型线效果完整实例
Feb 02 Javascript
JS求Number类型数组中最大元素方法
Apr 08 Javascript
Vue项目中跨域问题解决方案
Jun 05 Javascript
区别JavaScript函数声明与变量声明
Sep 12 Javascript
微信小程序webview 脚手架使用详解
Jul 22 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
Nov 13 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
跟我学Laravel之安装Laravel
2014/10/15 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
window.open的功能全解析
2006/10/10 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
jquery实现excel导出的方法
2013/04/04 Javascript
js 通用订单代码
2013/12/23 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
react-native-tab-navigator组件的基本使用示例代码
2017/09/07 Javascript
js 两个日期比较相差多少天的实例
2017/10/19 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
2019/01/09 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
Angular value与ngValue区别详解
2019/11/27 Javascript
[06:25]第二届DOTA2亚洲邀请赛主赛事第二天比赛集锦.mp4
2017/04/03 DOTA
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
python opencv读mp4视频的实例
2018/12/07 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
html5使用canvas画三角形
2014/12/15 HTML / CSS
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
药剂专业学生求职信范文
2013/12/28 职场文书
技术比武方案
2014/05/19 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
爱护公物主题班会
2015/08/17 职场文书
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers