jq的attr、prop和data区别
prop()获取在匹配的元素集中的第一个元素的属性值。
大家都知道有的浏览器只要写disabled,checked就可以了,而有的要写成disabled = "disabled",checked="checked",比如用attr("checked")获取checkbox的checked属性时选中的时候可以取到值,值为"checked"但没选中获取值就是undefined。
jq提供新的方法“prop”来获取这些属性,就是来解决这个问题的,以前我们使用attr获取checked属性时返回"checked"和"",现在使用prop方法获取属性则统一返回true和false。
那么,什么时候使用attr(),什么时候使用prop()?
1.添加属性名称该属性就会生效应该使用prop();
2.是有true,false两个属性使用prop();
3.其他则使用attr();
项目中jquery升级的时候大家要注意这点!
PS一下,如果你有JS性能洁癖的话,显然prop的性能更高,因为attr需要访问DOM属性节点,访问DOM是最耗时的。这种情况适用于多选项全选和反选的情况。
以下是官方建议attr(),prop()的使用:
jQuery.prop()和 jQuery.attr()方法同样都能够添加属性,但是也是有区别的,一般attr()用的比较频繁,但是有些情况用prop()更为方便。
基本的使用:
<style>
.bg{
width:200px;
height:200px;
background-color:red;
}
.bd{
border:1px solid #000;
}
</style>
<body>
<div></div>
</body>
<script>
$(function(){
$("div").attr("class","bg");//样式加载成功
console.log($("div").attr('class'));//bg
// $("div").prop("class",'bd');//这样会替代掉.bg
console.log($("div").prop("class"));
});
</script>
那么,什么时候使用attr(),什么时候使用prop()?
1.添加属性名称该属性就会生效应该使用prop();
2.是有true,false两个属性使用prop();
3.其他则使用attr();
如下实例,当checked没有在标签中定义的时候,prop就能够获取属性的值。
<body>
<input type="checkbox">
<lable>复选框</lable>
</body>
<script>
$(function(){
console.log($("input").attr("checked"));//undefined attr是去标签中寻找该属性
console.log($("input").prop("checked"));//false prop直接获取属性内容
});
</script>
checked是true和false时,attr返回属性名,prop返回属性的值
<body>
<input type="checkbox" checked="true" aaa="bbb">
<lable>复选框</lable>
</body>
<script>
$(function(){
console.log($("input").attr("checked"));//checked 是true和false时,attr返回属性名
console.log($("input").attr("aaa"));//bbb 不是true和false时,返回该属性的值
console.log($("input").prop("checked"));//false prop直接获取属性内容
});
</script>
以上例子看起来还是prop比较直接一点,可以考虑多用用。
补充:JavaScript的getAttribute和 jQuery.attr()的问题
首先看看JavaScript的getAttribute和 jQuery.attr()的差别,我写了两个例子,可以很明确的看出差别:
jQ加载的库是<script src="./js/jquery-1.7.2.js"></script>
<body>
<input type="text" value="1">
</body>
<script>
$(function(){
console.log($("input").val());//1
console.log($("input").attr("value"));//1
var timer = null;
timer = setInterval(function(){
console.log($("input").val());//重新输入的值
console.log($("input").attr("value"));重新输入的值
},2000);
});
</script>
<body>
<input id="amount" type="text" value="1">
</body>
<script>
document.addEventListener("DOMContentLoaded",function(){
var oV = document.getElementById("amount");
console.log(oV.value);//1
console.log(oV.getAttribute("value"));//1
setInterval(function(){
console.log(oV.value);//重新输入的值
console.log(oV.getAttribute("value"));//1
},2000);
},false);
</script>
以上两个例子中getAttribute不能够直接获取改变后的value值,只能获取初始值,而 jQuery.attr()可以;
下面看看jQuery.data()方法
<body>
<div></div>
</body>
<script>
$(function(){
$("div").data("aaa","bbb");
console.log($("div").data('aaa'));//bbb
console.log($("div").attr('aaa'));//undefined
});
</script>
加在data上面的数据只有data能够取到,相当于所有的data上面的数据都在一起,方便保存和使用。
$(function(){
$("div").data("aaa","bbb");
$("div").attr("aaa","ccc");
console.log($("div").data('aaa'));//bbb
console.log($("div").attr('aaa'));//ccc
});
尽管变量名相同的情况下,也不会受到影响。
jq的attr、prop和data区别的更多相关文章
- jq中attr()和prop() 属性的区别
query1.6中新加了一个方法prop(),一直没用过它,官方解释只有一句话:获取在匹配的元素集中的第一个元素的属性值. 大家都知道有的浏览器只要写disabled,checked就可以了,而有的要 ...
- jquery中attr、prop、data
在高版本的jquery中获取标签的属性,可以使用attr().prop().data(),那么这些方法有什么区别呢? 对于HTML元素本身就带有的固有属性,在处理时,使用prop方法. 对于HTML元 ...
- attr(),prop()二者区别和最佳实践
attr(),prop()二者区别和最佳实践 最近使用到attr()来获取自定义属性值,我印象中是有一个方法可以获取到自定义属性值,进而我又想到了另一个方法prop(). 查看了手册发现并没有对二者 ...
- jQuery中attr和prop方法的区别说明
jquery中attr和prop的基本区别可以理解为:如果是内置属性,建议用prop,如果是自定义的建议用attr. 例如 <input type=check node=123 id=ck & ...
- jQuery中attr和prop方法的区别
jQuery中attr和prop方法的区别。 http://my.oschina.net/bosscheng/blog/125833 http://www.javascript100.com/?p=8 ...
- jquery之 css()方法。用法类似的有attr(),prop(),val()
[注]attr(),prop(),val()的用法结构和css()一致,可参考 css()函数用于设置或返回当前jQuery对象所匹配的元素的css样式属性值. 该函数属于jQuery对象(实例).如 ...
- 关于jQuery中attr(),prop()的使用
注意:什么时候使用attr(),什么时候使用prop()?1.添加属性名称该属性就会生效应该使用prop();2.是有true,false两个属性使用prop();3.其他则使用attr(); 以下是 ...
- jQuery中attr()、prop()、data()用法及区别
.attr(),此方法从jq1.0开始一直存在,官方文档写的作用是读/写DOM的attribute值,其实1.6之前有时候是attribute,有时候又是property..prop(),此方法jq1 ...
- jQuery attr() prop() data()用法及区别
.attr(),此方法从jq1.0开始一直存在,官方文档写的作用是读/写DOM的attribute值,其实1.6之前有时候是attribute,有时候又是property..prop(),此方法jq1 ...
随机推荐
- 尝试编辑java程序
尝试编译java程序 之前在用软件eclipse编译过简单的hello java程序,因为软件操作简单,后来学会了用命令符来编译程序.代码如下 public class abc { ...
- 仔细讨论 C/C++ 字节对齐问题⭐⭐
原文:https://www.cnblogs.com/AlexMiller/p/5509609.html 字节对齐的原因 为了提高 CPU 的存储速度,编译器会对 struct 和 union的存储进 ...
- GSM900TCP/UDP连接
TCP发送:AT+CIPSTART="TCP","122.0.114.244",1001返回:OK CONNECT OK 发送: AT+CIPSEND > ...
- Java 设计模式六原则及23中常用设计模式
一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接 ...
- 谈谈let与const
let 命令 let命令用于声明变量,但是与传统var命令的不同之处在于拥有以下特性: 使用let命令声明的变量只在let命令所在的代码块内有效(我将之称为变量绑定): 不存在变量提升: 存在暂时性死 ...
- sqoop将mysql的tinyint类型转化为boolean类型
当mysql中的字段为tinyint类型时,通过sqoop导入数据到hdfs上,在hdfs上显示的是true,false值.为了显示0,1. 解决方法: jdbc:mysql://<hostna ...
- 新一代调试王者Console
随着JS在Web前端中能做的事情越来越多,责任越来越大,而地位也越来越重要.传统的alert调试方式已经渐渐不能满足前端开发的种种场景.而且alert调试方式弹出的调试信息,那个窗口着实不太美观,而且 ...
- nginx web服务器详解1(转)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeloda.blog.51cto.com/2033581/1285332 大 ...
- Sql索引
1.为什么要给表加上主键?建表的时候都会为表加上主键, 在某些关系数据库中, 如果建表时不指定主键,数据库会拒绝建表的语句执行. 一个没加主键的表,并不能被称之为「表」.一个没加主键的表,它的数据无序 ...
- python中装饰器的执行细节
本文代码借用 廖雪峰的python教程(官网:http://www.liaoxuefeng.com/) 不了解装饰器的可以先看教程 直接上带参数装饰器的代码 def log(text): def de ...