被问到 property 和 attribute 的区别,想来也是要好好看一下。

一、基本概念区别

其实Attribute和Property这两个单词,翻译出来都是“属性”,《js高级程序设计》书中翻译为“特性”和“属性”,以示区别。从而我们也可以顾名思义

特性vs属性(当然平时也可以简单的说两者都是属性),可以这样认为:

Attribute

是HTML标签上的某个属性(特性),如‘type’,'id','value','class'以及自定义属性,它的值只能是字符串。

Property

javascript获取到的DOM节点对象,比如a 你可以将他看作为一个基本的js对象,这个节点对象包括很多属性((property),比如“value”,“className”)

以及一些方法,setAttribute,getAttribute,onclick等

还是太生涩了?看个input的例子

<input type="text" name="age" class="age" id="age" value="17" myAttr="myAttr">

可以看到,attributes只是properties这个大货色中的某个属性,其余property也是这样(和attributes同级)

再来看看attributes这货长什么样?

ok那我们可以直接这样玩了

也许是因为class是js的保留字,不能直接age.class吧,用className代替这几种方式分别获取了attribute和property

但是我们的自定义属性,就有不同了

常用的Attribute,例如id、class、name等,已经被作为Property附加到DOM对象上,可以和Property一样取值和赋值。但是自定义的Attribute,就不会有这样的特殊优待

attribute的获取设置修改一般使用 setAttribute()和getAttribute()  比较方便

而property 则使用  打点符. 或 [] 的方式获取即可

二、一些息息相关又有差异的东东

1. value的差异

默认情况下是17

手动或直接代码更改value为15后(可以看出输入框value的变化只会引起property方面的变化)

那主动权换为attribute呢?

2. name , id, class (互相影响)

同样的,让attribute来主动

class的操作

3.上面都是在原有属性改来改去,那增添新的属性会怎样呢?

abc,cba是可以认为是一个非默认属性吧,title,align 是,看下结果慢慢领会

把主动权交给attribute

所以一般对于默认的自有属性而言,property和attribute的影响是双向的

事实上value这东西真的很... 假设我最初没有value,会发生什么呢?

<input type="text" name="age" class="age" id="age" myAttr="myAttr">

所以啊,这是个特例,要想attribute的value也能得到变化,还非得特地去setAttribute()才行

4.对于形如 hidden:true的属性

高能预警:看这个东西会死很多脑细胞..(我的建议是跳过这段吧)

可以发现,若初始

假如我一开始input就设置了hidden呢?

<input type="text" name="age" class="age" id="age" myAttr="myAttr" hidden>

是不是很绕啊~~~~~~

那假如我一开始就给hidden来个属性呢,比如 no_hidden?(这样输入框也是会直接隐藏的)

<input type="text" name="age" class="age" id="age" myAttr="myAttr" hidden="no_hidden">

我们来看看操作

还有一种情况额,假如我设置为 hidden=true呢

<input type="text" name="age" class="age" id="age" myAttr="myAttr" hidden=true>

基本没其他情况了吧,总结一下? 好难总结,还是算了..

5. style属性

<input type="text" name="age" class="age" id="age" myAttr="myAttr" style="width:50%;height:30px;">

对于这其中的style Attribute和property的返回有什么不同呢? Attribute照常是字符串,而property则是个对象

6. onclick属性

<input type="text" name="age" class="age" id="age" myAttr="myAttr" onclick="function(){}">

Attribute可以正确获取到,而property方式就只能作为事件处理机制(所以会报错),也许也可以将其归入自定义属性的行列

7. src 或 href 这些有链接形式的属性

<img src="./1.jpg" id="img">

获取的时候,Attribute会直接使用表面上的属性(相对路径),property则会使用实际的绝对路径(设置的时候可以用相对)

三、来个小小的总结

1.没有非常明确的区别,只是有某些规律可遵循

2.attributes是和每个Property是在同一父级(可以这样认为吧)的,而每个Attribute的父级就是attributes

3. Attribute可以理解为特性(就是说可以有自定义的属性),property可以理解为属性(即html最基本提供的属性)

4.一般来说,无论开始还是任何时候,Attribute的变化会引起Property的变化, 而property的变化也会同步给Attribute进行变化(value除外)

5.有一些特殊的属性,要特殊对待

6.为了统一,最好直接使用 setAttribute()和getAttribute() ,IE8以上都支持了,不过IE6/7不支持的话,

比如obj.setAttribute("style","z-index:999;cursor:pointer")不支持,

那就退化成obj.style.cssText="z-index:999;cursor:pointer";

7.jq提供的 attr()和prop()方法, 其实就是基于 Attribute和property原生的使用方式

DOM中 property 和 attribute 详解的更多相关文章

  1. DOM 中 Property 和 Attribute 的区别

    原文地址:http://web.jobbole.com/83129/ property 和 attribute非常容易混淆,两个单词的中文翻译也都非常相近(property:属性,attribute: ...

  2. DOM 中 Property 和 Attribute 的区别(转)

    property 和 attribute非常容易混淆,两个单词的中文翻译也都非常相近(property:属性,attribute:特性),但实际上,二者是不同的东西,属于不同的范畴. property ...

  3. [转]DOM 中 Property 和 Attribute 的区别

    angular的文档: https://angular.io/guide/template-syntax#property-binding https://blog.csdn.net/sunq1982 ...

  4. Objective-C中@property的所有属性详解

    1,assign : 简单赋值,不更改索引计数 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b.此时a 和b指 ...

  5. C#中的Attribute详解(下)

    原文地址:https://blog.csdn.net/xiaouncle/article/details/70229119 C#中的Attribute详解(下) 一.Attribute本质 从上篇里我 ...

  6. .Net Attribute详解(一)

    .Net Attribute详解(一) 2013-11-27 08:10 by JustRun, 1427 阅读, 14 评论, 收藏, 编辑 Attribute的直接翻译是属性,这和Property ...

  7. 巨人大哥谈Web应用中的Session(session详解)

    巨人大哥谈Web应用中的Session(session详解) 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术. ...

  8. .Net Attribute详解(下) - 使用Attribute武装枚举类型

    接上文.Net Attribute详解(上)-Attribute本质以及一个简单示例,这篇文章介绍一个非常实用的例子,相信你一定能够用到你正在开发的项目中.枚举类型被常常用到项目中,如果要使用枚举To ...

  9. JS中的event 对象详解

    JS中的event 对象详解   JS的event对象 Event属性和方法:1. type:事件的类型,如onlick中的click:2. srcElement/target:事件源,就是发生事件的 ...

随机推荐

  1. iOS 同一设备内的应用之间资源共享的实现

    我们都知道,iOS为安全考虑,各应用只能使用其自已的应用沙盒内的存储空间,各应用之间是不能互相访问彼此的沙盒空间的. 另外,iOS设备都没有外置存储卡,这样,象 Android 设备间共同访问外置存储 ...

  2. <a>标签href属性与onclick事件

    a标签主要用来实现页面跳转,可以通过href属性实现,也可以在onclick事件里实现. <a onclick="window.location.href='www.cnblogs.c ...

  3. 搞不清FastCgi与PHP-fpm之间是个什么样的关系(转载)

    刚开始对这个问题我也挺纠结的,看了<HTTP权威指南>后,感觉清晰了不少. 首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. ...

  4. eclipse 代码提示时闪退问题

    解决办法:在eclipse.ini里面最下面加上这句话 -Dorg.eclipse.swt.browser.DefaultType=mozilla

  5. android多国语言文件夹文件汇总

    android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-e ...

  6. SAP ECC FI配置文档

    SAP ECC 6.0 Configuration Document Financial Accounting (FI) Table of Content TOC \O "1-2" ...

  7. CodeBlocks16.01+wxWidgets3.0.2

    [环境] windows7 x64,CodeBlocks16.01,wxWidgets3.0.2 [步骤] 一.下载所需的文件: 1.codeblocks官网:http://www.codeblock ...

  8. How to Debug Enterprise Portal Code in Dynamics AX 2009

    转载 To set up debugging for pages1. Log into the server that is running the AOS.2. Open the Microsoft ...

  9. js 事件捕获与事件冒泡例子

    http://codepen.io/huashiyiqike/pen/qZVdag addEventListener 默认是冒泡阶段执行,也就是父亲与子都监听时,点击子,子先处理,父亲再处理,这时加s ...

  10. MSIL 教程(三):类和异常处理(转)

    转自:http://www.cnblogs.com/Yahong111/archive/2007/08/16/857771.html 续上文[翻译]MSIL 教程(二):数组.分支.循环.使用不安全代 ...