prop 和 attr 中一些羞羞的事情
引言
前几天做一个迷你京东小项目的时候涉及到一个全选的小功能,一开始用的是 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 中一些羞羞的事情的更多相关文章
- jquery1.6中的.prop()和.attr()异同
jquery jQueryHTML5JavaScript浏览器ITeye 最近在iteye的新闻中看到jQuery已经更新到了1.6.1.和之前版本的最大变化是增加了.prop方法.但是.prop( ...
- jQuery中prop和attr区别
问题 今天给一个button加onclick事件,由于最后button根据需要转成字符串,因此不能使用jQurey.click(),只能给button添加onclick属性的方式. 于是,$butto ...
- jQuery中的prop和attr区别
最近在做一个项目用jq时发现一个问题 在谷歌中可以正常出效果 但是在火狐中就是不行 就是这个prop和attr 之前用的是attr方法 但是在火狐中不出效果 于是特意看了两者的区别 主要 ...
- jquery中prop和attr的区别
jquery中prop和attr的区别 prop: prop(name|properties|key,value|fn) **概述** 获取在匹配的元素集中的第一个元素的属性值. 随着一些内置属性的D ...
- Jquery学习笔记(5)--jquery1.6中的.prop()和.attr()异同
jquery1.6中的.prop()和.attr()异同 最近在iteye的新闻中看到jQuery已经更新到了1.6.1.和之前版本的最大变化是增加了.prop方法.但是.prop()方法和.attr ...
- jquery中的prop和attr比较区别
近期和一同事争执prop和attr的区别,也查了很多,同事说它只是特性和固有属性的区别,但是我也查到了一些其他的,故此,来总结一下吧! 1.固有属性和特别属性 对于HTML元素本身就带有的固有属性,在 ...
- JQuery中的prop和attr
prop和attr都可以用来获取并改变对象的属性, 对于HTML元素本身就带有的固有属性,在处理时,使用prop方法. 对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法. 栗子: ...
- 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设计 的宗旨是“ ...
- jQuery学习之prop和attr的区别示例介绍
1..prop( propertyName ) 获取匹配集合中第一个元素的Property的值 2. .prop( propertyName, value ) .prop( map ) .prop( ...
随机推荐
- sublim text3快速生成html代码时,tab键失效问题
sublime text3是一款非常强大的文本编辑器,个人觉得做前端的话这款工具很好用.便携,秒启.唯一让我觉得不是特别爽的就是插件啊,都需要自己安装.不过瑕不掩瑜,这款编辑器是很适合开发前端和PHP ...
- Codeforces 908F - New Year and Rainbow Roads 【脑洞】
题意:在一条数轴上有若干'R','B','G'点,连接两个点的代价是位置差,要求使用最小代价使得除去所有'R'点后剩下的所有点联通,除去所有'B'点后剩下的所有点联通. 还以为会是什么最小生成树,结果 ...
- thunderbird 登录网易邮箱
登录密码不是自己的密码,而是在网易邮箱中设置的客户端授权ma,自己先进入邮箱进行设置即可
- C++this详解
以前对this指针误解挺多的,在这里单独写一篇进行总结,有不对之处,欢迎指正批评! 一.问题 1.一个类中的不同对象在调用自己的成员函数时,其实它们调用的是同一段函数代码,那么成员函数如何知道要访问哪 ...
- centos安装PHP扩展(bcmath)
Centos下搭完Mysql+Apache+PHP后,发现有些网页打开是空白的.将php.ini里面的参数 error_reporting = E_ALL,display_errors = On,di ...
- Oracle10g初探DBCA
Database Configuration Assistant. [oracle@dbsrv3 bin]$ pwd /opt/oracle//bin [oracle@dbsrv3 bin]$ ./d ...
- C#画图——Graphics
C#要实现简单的画图功能可以利用Graphics这个类,要使用Graphics必需using命名空间System.Drawing(此名明空间下都是关于图形的操作).首先创建画布: Bitmap bmp ...
- jmeter(十)JMeter 命令行(非GUI)模式
前文 讲述了JMeter分布式运行脚本,以更好的达到预设的性能测试(并发)场景.同时,在前文的第一章节中也提到了 JMeter 命令行(非GUI)模式,那么此文就继续前文,针对 JMeter 的命令行 ...
- 动态添加出来append的元素加事件
$("body").on("click","#box span",function(){里面执行的东西}) span 是动态添加出来的
- 工作记录:JS正则表达式 angularjs ng-if ng-show ng-switch
用了一下JS 正则表达式判断密码,很简单 学习了angularjs的ng-if ng-show ng-switch的区别并使用 https://www.cnblogs.com/54td/p/59743 ...