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 相关文章推荐
动态创建的表格单元格中的事件实现代码
Dec 30 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
Mar 20 Javascript
浅析JavaScript中的事件机制
Jun 04 Javascript
JQuery用户名校验的具体实现
Mar 18 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
Jul 11 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
Nov 25 Javascript
Vue.js tab实现选项卡切换
May 16 Javascript
移动端触摸滑动插件swiper使用方法详解
Aug 11 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
Aug 13 Javascript
Vue 无限滚动加载指令实现方法
May 28 Javascript
vue element-ui el-date-picker限制选择时间为当天之前的代码
Nov 07 Javascript
如何HttpServletRequest文件对象并储存
Aug 14 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 数组教程 定义数组
2009/10/23 PHP
php下安装配置fckeditor编辑器的方法
2011/03/02 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
php实现微信支付之退款功能
2018/05/30 PHP
php中错误处理操作实例分析
2019/08/23 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
兼容IE和Firefox的javascript获取iframe文档内容的函数
2011/08/15 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
js实现div色块拖动录制
2020/01/16 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
Python发送Email方法实例
2014/08/21 Python
python操作redis的方法
2015/07/07 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
linux安装python修改默认python版本方法
2019/03/31 Python
pycharm快捷键汇总
2020/02/14 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
中级会计职业生涯规划范文
2014/01/16 职场文书
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
师范大学生求职信
2014/06/13 职场文书
高中学校对照检查材料
2014/08/31 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书
《钓鱼的启示》教学反思
2016/02/18 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python