<input type="checkbox" checked="checked" zidingyi="zidingyi"/> //type、checked与zidingyi的属性与值都以字符串形式存储在DOM对象的attributes中
//还是上面的代码,除了DOM对象中本身自带的属性外,html中预定义属性会以属性的形式加入到DOM对象中
//此时DOM中除了其他本身的属性,还额外存在type="checkbox"、checked=true、id=""等等
<input type="checkbox" checked="checked" zidingyi="zidingyi"/>
弄清楚attributes与property区别后,需要知道,为什么在property中对checked进行了隐式的转换
显然枯燥的理论显得对两者的区分显得无聊,我们真正关注的是:我们更改上面勾选框状态时,浏览器到底进行了什么
//同样的代码
<input type="checkbox" checked="checked" zidingyi="zidingyi"/>
//当我们在浏览器中点击进行勾选时,更改的是property
实际上,在jQuery中,jQuery对象有attr()和prop()两个方法,在使用attr()时,我们会发现一个有趣的现象
//思考以下代码
$(() => {
$(‘button‘).click(() => {
$(‘input‘).attr(‘checked‘, true)
})
})
<input type="checkbox" zidingyi="zidingyi" />
<button>btn</button>
我们会惊奇的发现,当点击按钮后的确选上了,可是手动取消选中状态后,按钮像是失效了一样
在试验后我发现,attributes中的属性和property有一种微妙的关系,其表现为:
在了解规律后,对于开发者来说,是不是应该全面禁止更改attributes预防不良影响呢?
答案是否定的,对于非布尔熟悉使用更改attributes的方式能够在一定程度上提升效率,详见官方建议:
以上结果为chrome 81.0.4044.122测试情况,如有错误,欢迎指正!
原文:https://www.cnblogs.com/c46550/p/12819430.html