DOM中 property 和 attribute 详解
被问到 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 详解的更多相关文章
- DOM 中 Property 和 Attribute 的区别
原文地址:http://web.jobbole.com/83129/ property 和 attribute非常容易混淆,两个单词的中文翻译也都非常相近(property:属性,attribute: ...
- DOM 中 Property 和 Attribute 的区别(转)
property 和 attribute非常容易混淆,两个单词的中文翻译也都非常相近(property:属性,attribute:特性),但实际上,二者是不同的东西,属于不同的范畴. property ...
- [转]DOM 中 Property 和 Attribute 的区别
angular的文档: https://angular.io/guide/template-syntax#property-binding https://blog.csdn.net/sunq1982 ...
- Objective-C中@property的所有属性详解
1,assign : 简单赋值,不更改索引计数 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b.此时a 和b指 ...
- C#中的Attribute详解(下)
原文地址:https://blog.csdn.net/xiaouncle/article/details/70229119 C#中的Attribute详解(下) 一.Attribute本质 从上篇里我 ...
- .Net Attribute详解(一)
.Net Attribute详解(一) 2013-11-27 08:10 by JustRun, 1427 阅读, 14 评论, 收藏, 编辑 Attribute的直接翻译是属性,这和Property ...
- 巨人大哥谈Web应用中的Session(session详解)
巨人大哥谈Web应用中的Session(session详解) 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术. ...
- .Net Attribute详解(下) - 使用Attribute武装枚举类型
接上文.Net Attribute详解(上)-Attribute本质以及一个简单示例,这篇文章介绍一个非常实用的例子,相信你一定能够用到你正在开发的项目中.枚举类型被常常用到项目中,如果要使用枚举To ...
- JS中的event 对象详解
JS中的event 对象详解 JS的event对象 Event属性和方法:1. type:事件的类型,如onlick中的click:2. srcElement/target:事件源,就是发生事件的 ...
随机推荐
- Markdown学习语法的记录
标题示例 === 标题示例 ---- #标题示例 ##标题示例 ###标题示例 >引用示例 >>引用示例 >>> 引用示例 _斜体示例_ *斜体示例* __粗体示例 ...
- Windows Azure 入门系列课程Windows Azure 入门系列课程
Windows Azure 入门系列课程 https://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/NewSeries/A ...
- golang全文搜索--使用sphinx
不多废话,测试环境 `ubuntu 13.10` ## 安装 sudo apt-get install sphinxsearch ## 配置 nano /etc/sphinxsearch/sphinx ...
- 菜鸟教程之工具使用(十四)——Maven项目右击没有“Maven”菜单选项
从Git导入一个Maven项目,右击想更新Maven引用的jar包,却发现右键菜单根本没有“Maven”菜单项.怎么办?很简单,按如下步骤操作即可: 从Git导入后,右击项目没有“Maven”菜单项: ...
- 学习之路三十六:SQL知识总结 - [游标||字符串分割]
好久没有写文章了,今天把前不久项目用到的SQL知识总结一下. 一丶字符串分割 SQL内置函数中是没有Split分割函数的,所以需要自己去实现,不多说,上代码: )) RETURNS @result T ...
- aspcms常见问题解决方案
1.产品详细页读取多张产品图片(栏目类型:产品){aspcms:cimages count=16 contentid=[content:id]}<li onmouseover="sho ...
- UDP"打洞"原理
1. NAT分类 根据Stun协议(RFC3489),NAT大致分为下面四类 1) Full Cone 这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口 ...
- 哈希表用于Key与Value的对应
一个类的某个属性要实现Key与Value的对应,以便通过访问名称就可以知道对应值,而不是通过索引号,最简单的方法直接用 哈希表using System.Collections;class Class1 ...
- 15个实用的CSS在线实例教程
前端技术可以说是必须学习的一个技术,现在做网站都需要懂DIV.CSS,在国内很多企业招网页设计师都要求会写基本的前端代码,所以前端技术是 必须了解的,对网页设计师本身也有帮助,今天向大家推荐一些不错的 ...
- IL速查
名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且 ...