引言

前几天做一个迷你京东小项目的时候涉及到一个全选的小功能,一开始用的是 attr,但是效果完全不是自己想要的,当商品按钮点击过一次后,attr就无法对其状态进行更改,最后谷歌了一番发现需要用 prop 来代替。虽然效果问题解决了,但是自己还是想弄懂 prop 和 attr 的区别.

版本使用不同

遇到问题我一般先会去查相关的官方文档,可在 jq 的 api 中文文档中没有发现有价值的东西,只是发现适用的版本和概念有所轻微的不同。

attr : 设置或返回被选元素的属性值.版本:1.0

prop : 获取在匹配的元素集中的第一个元素的属性值。版本:1.6+

从概念中发现操作的对象和使用也好像基本相同,然后带着疑惑去进行了一番实验并去查阅了一些相关资料

示例代码

···
<table>
<thead>
<tr><input type="checkbox" class="checkAll">全选</tr>
</thead>
<tbody>
<tr><input class="item" type="checkbox">单选</tr>
<tr><input class="item" type="checkbox">单选</tr>
<tr><input class="item" type="checkbox">单选</tr>
<tr><input class="item" type="checkbox">单选</tr>
<tr><input class="item" type="checkbox">单选</tr>
<tr><input class="item" type="checkbox">单选</tr>
</tbody>
</table>
```


$('.checkAll').click(function() {
$('.item').attr('checked', this.checked);
});

问题描述

当全选按钮选中时单选按钮全部选中,当全选按钮不选中时单选按钮全部不选中,只点全选按钮时,反复几次都没问题,但是要是点击了其中一个单选按钮,那这个单选按钮就不会在像其它单选按钮一样跟随全选按钮的状态的改变而改变。

attr 和 prop 的本质

attr 是 attribute 的缩写,prop 是 property 的缩写,都有属性的意思,只不过 attr 是操作 html 文档节点属性,prop 是操作 js 对象属性. attr 在 js 中使用的是 setAttribute 和 getAttribute 而 prop 直接使用原生 js 的 element[value] 和 element[value]=key。

attr 和 prop 的区别

attr 设置的属性值只能是字符串类型,如果不是字符串类型,也会调用其 toString() 方法,将其转换成字符串类型。

prop 设置的属性值可以包括数组和对象在内的任意类型

有关布尔值的属性

1.6 之后, attr 返回的也是字符串类型, 选中或禁用直接返回 checked,selected,disabled。否则返回undefined。解决我问题的关键就是下面一句话

jQuery 认为:attribute 的 checked、selected、disabled 就是表示该属性初始状态的值,property 的 checked、selected、disabled 才表示该属性实时状态的值(值为 true 或 false)。

当涉及到 boolean 值时,比如 checkbox 这样的,有 true 和 false 这样的布尔值的元素属性,attributes 在页面加载的时候就被设置,并且一直保持初始值,而 properties 则存储着元素属性的当前值。

所以当我没有点击单选按钮的时候,它就是没被用户点击过的浏览器刚加载出来的初始状态,此时可以通过 attr 去设置并操控,当有用户点击的时候,当前按钮就不是初始状态,attr自然也就无法操控。

原文地址:https://segmentfault.com/a/1190000014788155

prop 和 attr 中一些羞羞的事情的更多相关文章

  1. jquery1.6中的.prop()和.attr()异同

    jquery jQueryHTML5JavaScript浏览器ITeye  最近在iteye的新闻中看到jQuery已经更新到了1.6.1.和之前版本的最大变化是增加了.prop方法.但是.prop( ...

  2. jQuery中prop和attr区别

    问题 今天给一个button加onclick事件,由于最后button根据需要转成字符串,因此不能使用jQurey.click(),只能给button添加onclick属性的方式. 于是,$butto ...

  3. jQuery中的prop和attr区别

    最近在做一个项目用jq时发现一个问题  在谷歌中可以正常出效果  但是在火狐中就是不行 就是这个prop和attr   之前用的是attr方法   但是在火狐中不出效果  于是特意看了两者的区别 主要 ...

  4. jquery中prop和attr的区别

    jquery中prop和attr的区别 prop: prop(name|properties|key,value|fn) **概述** 获取在匹配的元素集中的第一个元素的属性值. 随着一些内置属性的D ...

  5. Jquery学习笔记(5)--jquery1.6中的.prop()和.attr()异同

    jquery1.6中的.prop()和.attr()异同 最近在iteye的新闻中看到jQuery已经更新到了1.6.1.和之前版本的最大变化是增加了.prop方法.但是.prop()方法和.attr ...

  6. jquery中的prop和attr比较区别

    近期和一同事争执prop和attr的区别,也查了很多,同事说它只是特性和固有属性的区别,但是我也查到了一些其他的,故此,来总结一下吧! 1.固有属性和特别属性 对于HTML元素本身就带有的固有属性,在 ...

  7. JQuery中的prop和attr

    prop和attr都可以用来获取并改变对象的属性, 对于HTML元素本身就带有的固有属性,在处理时,使用prop方法. 对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法. 栗子: ...

  8. java:JQuery(声明,JQ和JS对象的区别,prop,attr,addClass,offset,trigger,dblclick和change事件,hide,show,toggle,slideUp,slideDown,slideToggle,三种选择器,标签的获取,三张图片的放大与缩小)

    1.JQuery: jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计 的宗旨是“ ...

  9. jQuery学习之prop和attr的区别示例介绍

    1..prop( propertyName ) 获取匹配集合中第一个元素的Property的值 2. .prop( propertyName, value ) .prop( map ) .prop( ...

随机推荐

  1. bzoj 2005: [Noi2010]能量采集【莫比乌斯反演】

    注意到k=gcd(x,y)-1,所以答案是 \[ 2*(\sum_{i=1}^{n}\sum_{i=1}^{m}gcd(i,j))-n*m \] 去掉前面的乘和后面的减,用莫比乌斯反演来推,设n< ...

  2. bzoj 1863: [Zjoi2006]trouble 皇帝的烦恼【二分+dp】

    二分答案,注意l是max(a[i]+a[i+1]),r是sum_a 判断的时候用dp,设f[i]为i与1最少的相同颜色数,g[i]为i与1最多的相同颜色数,转移是f[i]=max(a[i]-(w-a[ ...

  3. P4949 最短距离(树链剖分+树状数组+基环树)

    传送门 一个中午啊-- 本来打算用仙人掌搞的,后来发现直接基环树就可以了,把多出来的那条边单独记录为\((dx,dy,dw)\),剩下的树剖 然后最短路径要么直接树上跑,要么经过多出来的边,分别讨论就 ...

  4. 购买阿里云ECS+安装宝塔面板+Mac下怎么连接阿里云ECS服务器

    1.购买阿里云ECS 2.重置实例密码 这个有点对用户不友好,实际意思就是设置服务器的root登录密码 3.配置安全组放行端口 因为服务器需要从宝塔网站download安装包,包括一些常用的服务比如S ...

  5. 使用redis构建分布式锁

    Redis使用WATCH命令来代替对数据进行加锁,因为WATCH只会在数据被其他客户端抢先修改了的情况下通知执行了这个命令的客户端,但是不会阻止其他客户端对数据进行修改,所以这个命令被称为乐观锁. 但 ...

  6. Hdu 5361 In Touch (dijkatrs+优先队列)

    题目链接: Hdu 5361  In Touch 题目描述: 有n个传送机排成一排,编号从1到n,每个传送机都可以把自己位置的东西传送到距离自己[l, r]距离的位置,并且花费c,问从1号传送机到其他 ...

  7. VS2010下安装Opencv 分类: Opencv 2014-11-02 13:51 778人阅读 评论(0) 收藏

    Opencv作为一种跨平台计算机视觉库,在图像处理领域得到广泛的应用,下面介绍如何在VS2010中安装配置Opencv 一.下载Opencv 下载网址:http://sourceforge.net/p ...

  8. D. Dasha and Very Difficult Problem 二分

    http://codeforces.com/contest/761/problem/D c[i] = b[i] - a[i],而且b[]和a[]都属于[L, R] 现在给出a[i]原数组和c[i]的相 ...

  9. B. Hongcow Solves A Puzzle

    http://codeforces.com/contest/745/problem/B 题目要求的是,给定一个图形,要求里面判断是否有矩形,且仅有一个 就是 XXX.... XXX...X 是不行的, ...

  10. c#.net 正则匹配以特定字符串开头,以特定字符串结尾

    string[] unit = Getunit(result40, "(?<=(开始字符串))[.\\s\\S]*?(?=(结束字符串))"); private string ...