DOM的attribute和property

 

DOM的attribute和property

 

今天讲一个JS的小话题,就是DOM节点的attribute和property的区别,这个点看起来很小,其实背后别有洞天。如果面试一个前端,听他讲讲对这个问题的理解,基本能分辨是不是菜鸟。下面的内容请各位细心体会。

页面有一个INPUT输入框

 

这个比较简单,没什么好说的,两个值都是’1′。现在我把输入框的值改成100,然后重新取一遍值:


为什么两个值不同了?这就是attribute和property在作怪。

Attibute

这个INPUT节点有很多属性(attribute):’type’,’id’,’value’,’class’以及自定义的’data-explain’。Javascript的DOM模型提供了两个方法getAttribute()和setAttribute() 读写DOM树节点属性(attribute)值。注意这里的getAttribute()方法有个潜规则:部分特殊属性(比如INPUT的value和checked),getAttribute取到的是初始值,这就解释了修改输入框值为100后,v1取到的还是初始值’1′。

Property

Javascript获取到的DOM节点对象,比如a,你可以把它看作一个基本JS对象(尽管某些浏览器实现上并不完全是),这个对象实现了很多属性(property):’value’,’className’等,以及一些方法还有前面说的getAttribute,setAttribute,onclick等。注意这个对象的’value’属性(property)取的值是输入框内的当前值。所以v2的值是’100′。

推荐大家尽量使用property,这样事情处理起来简单一下,attribute的值永远是字符串,比如:

另外,由于浏览器实现细节的差异,也存在一些坑,比如:在Chrome,Firefox及IE8之后,标签的attribute名是大小写不敏感的,DOM.setAttribute(‘myname’,'xxx’)可以通过DOM.getAttribute(‘MyName’)来取,另外在XHTML文档模式下,设置’tabIndex’为任意值会将’tabindex’值置为0。

对于attribute和property,jQuery中的实现其实挺纠结的,大家应该知道jQ的跟他们相关的三个方法 .attr()、.prop()以及.data(),这三个背后也有渊源,这个说开又是另一个话题,大家可以先自己思考,后面我再给大家分享。

转载于:https://www.cnblogs.com/schumi-lds/p/3954093.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值