jquery版本的迭代,致方法的改版以及两者之间本身就存在一定的区别
在做一个简单的小需求的时候发现了一个问题。需求很简单,点击复选框,控制全选以及全部选。
1 | <div class="container"> |
点击#check 改变.child-check 的checked属性。
1 | $('#check').on('click',function(){ |
正常来做的话,应该都是这样写的。但实际上,在运行的时候发现并不是这种情况,那这个时候只能进行调试了。打开chrome控制台,打上断点,一步步看下问题所在。在代码里面,我们是在控制台打印了_this.attr(‘checked’)它的值,因为后面的判断是根据这个值来判断,我们期望的是这个可以返回一个布尔值。但实际上在控制台里面打印出来的却是undefined,这就尴尬了。
那么只能google了。
首先,当前使用的jq版本是1.9.1,发现jq从1.6版本以后增加了prop()方法,接下来进入正题,两者之间有什么区别呢?
他们都表示属性的意思,但是attr表示html文档节点的属性,而prop则表示js对象的属性。ps:(有些也解释为html元素本身就带有的固有属性使用prop,自定义dom属性,是用attr。)
我们用jq时间应该也不短了,我们会发现一个特点,一般情况下,attr设置或得到的属性值是字符串类型,而prop则可以包括数组和对象在内的任意类型。
对于这一点,我觉得我们可以记住一点,对于获取或者设置checked,selected,disabled等属性都使用prop。
接下来贴上正确的代码
1 | $('#check').on('click',function(){ |
这时候控制台打印出来的就是我们想要的布尔值了。
有些时候,出现问题并不是什么坏事,通过一个很简单的东西也可以让我们知识更全面一点。对于类库框架之类的,有时间也可以自己打个断点调试一下,看看源码,来加深对它的认识。