入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

html 中的属性(property)以及DOM对象中的attributes的详解

创建时间:2016-12-14 投稿人: 浏览次数:1931

先来讲讲今天的主题: 探索property(也就是html的某些属性,比如input的value id这些自带属性)和attributes(html中能看到的所有属性,包括自定义属性)的差异

先来讲讲本"勃主"对这两个玩意的定义:

property: 指的是html 标签自带的属性,比如input 的value,id这些特有的属性,也就是说在w3c标准里面有提到的属性

attributes:指的是html标签上面的所有属性,包括自定义属性,比如:data属性,mydata属性,daye属性。。。。。

那他们有什么不同呢:

property:

这个属性是直接作为dom对象的子属性,可以直接访问,例如:

<input type="text" id="test" value="1" peopleName="nidaye">
var testObj=document.getElementById("test");

value属性是属于property属性,所以可以这样访问:testObj.value=>1;

peopleName是自定义属性,testObj.peopleName=>null  这样是获取不到值的,那要怎么获取呢?要这样获取

testObj.attributes.peopleName.peopleName="nidaye"; 这样才能获取到的

这也说明了存放的地方不一样,自定义属性是存放在一个叫attributes的对象里面的

但是,property对象在不在这个attributes对象里面呢,试试就知道了

testObj.attributes.value.value=1;明显也在这里


注意,不同点一:存在dom对象中的位置不一样,一个是作为dom对象的属性,而且在attributes属性对应的对象里面也同样存在,而另一个只存在dom对象的attributes属性对应的对象中


生命不息,折腾不止,我们继续:

在input中输入123,然后分别访问dom对象的value值和在attributes.value.value的值,结果如下:

testObj.value=123;  //testObj.value属性值已经跟着变化了

testObj.attributes.value.value=1;//是不是开始怀疑人生了,居然是1,没错,这个就是他们的第二个不同

property的值跟着input的输入改变而改变,也就是说它和页面上的value是同步的,而且attributes中的值并不会改变,可以这么理解,这里面存放的就是html属性的初始值,如果没有经过代码强制修改的话

注意,不同点二:property的值会同步html上的属性值,而且attributes里面的值只能通过代码进行修改,可以理解为attributes里面的数据时初始化数据

  

生命不息,折腾继续:

如果我们通过代码改变property的值那页面上的显示以及attributes里面的值会怎样,或则我们通过代码改变attributes里面的值,property的值和页面上的值会怎样?

带着一系列问题继续折腾:

testObj.value=456;  发现页面上的改了 ,testObj.attributes.value.value 的值并没有变化, 

testObj.value的就肯定改了(如果你刚好想问这个,那你可以怀疑人生了)

修改attributes里面的值:

testObj.attributes.value.value=789;发现页面上没有改,那自然就能想到testObj.value也肯定没有改是吧


注意,不同点三:property的值页面显示的值双向绑定,而attributes里面的值不会,而且半单向绑定,因为只有初始化时候的值会绑定到attributes里面。

也有一个共同点,就是通过代码修改的不管是property还是attributes里面的值,都没有办法影响到对方。


 好了,以上就是这两个概念的详解,如果有人说这有啥用,那我只能呵呵,在没有卖家的时候,钱也是没有用的,哈哈哈哈。。。。。


额外福利:爱过jq的屌丝都知道,jq设置和获取属性值有两个方法:

1.$().prop("name","nidaye");

2.$().attr("name","woshinidaye");

这两个方法有啥不一样呢,看上面就知道了

prop==>property

attr-attributes

智商不低于120的都知道啦,两个方法的不同点就是操作的是property属性还是attributes属性:

$("#test").prop("value");=>1;

$("#test").attr("value");=>1;

现在两个获取到的都是一样的:

然后:

$("#test").prop("value",2); input的显示值变成2

$("#test").prop("value");=>2;//傻的都知道会变啦

$("#test").attr("value");=>1;//这个不变


$("#test").attr("value",3); input的显示值还是2

$("#test").prop("value");=>2;//傻的都知道会变啦

$("#test").attr("value");=>3;//这个不变


总结:一看结果就是到,他们的不同之处在于prop操作的是property属性,而attr操作的是attributes里面的属性,而且不会反映在页面上,如果这时候还不知道什么时候用

prop,什么时候用attr,那我也没办法了(还是告诉你吧,value这些要把修改显示在页面上的属性操作用prop,peopleName这些乱七八糟的自定义属性用attr获取和设置)

如果你觉得我写的玩意对你有一点帮助,让你对世界的认知又多了一点给我赞一个啊,好让我有动力继续鲁更多的东西出来献世

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。