前言
在jQuery中有许多的功能能够简化开发流程,jQuery是一个JavaScript的库,封装了许多方法,很多时候,你会发现,在实现某个功能的时候,会发现这个功能的实现可以使用多种方法。
本文主要是介绍jQuery设置属性的两个方法:attr(attributes)和prop(properties)。
官方介绍
我们知道有的浏览器在表单项中写disabled或者checked就可以了,但是有的浏览器需要写成disabled=”disabled”或者checked=”checked”才可以,比如用attr(“checked”)获取checkbox的checked属性时选中的时候可以取到值,值为”checked”但没选中获取值就是undefined。
jQuery1.6之后,使用prop来获取这些属性就能解决问题,使用统一的返回true或者false。
在jQuery的3.3.1中有以下说明,截图如下:
attr
prop
对比
对于以上,官方文档上说到:
对于prop:
获取在匹配的元素集中的第一个元素的属性值。
随着一些内置属性的DOM元素或window对象,如果试图将删除该属性,浏览器可能会产生错误。jQuery第一次分配undefined值的属性,而忽略了浏览器生成的任何错误
对于attr:
设置或返回被选元素的属性值。
代码对比
<html>
<head>
<meta charset="utf-8">
<title>嘿咻</title>
<meta charset="utf-8">
<%--此处的库需要换成你自己的或者是cdn--%>
<script src="jquery/jquery-3.3.1.js"></script>
</head>
<body>
c1:<input id="c1" name="checkbox" type="checkbox" checked="checked" /></br>
c2:<input id="c2" name="checkbox" type="checkbox" checked=true/></br>
c3:<input id="c3" name="checkbox" type="checkbox" checked=""/></br>
c4:<input id="c4" name="checkbox" type="checkbox" checked/></br>
c5:<input id="c5" name="checkbox" type="checkbox" /></br>
c6:<input id="c6" name="checkbox" type="checkbox" checked=false/></br>
<script>
var a1=$("#c1").attr("checked");
var a2=$("#c2").attr("checked");
var a3=$("#c3").attr("checked");
var a4=$("#c4").attr("checked");
var a5=$("#c5").attr("checked");
var a6=$("#c6").attr("checked");
var p1=$("#c1").prop("checked");
var p2=$("#c2").prop("checked");
var p3=$("#c3").prop("checked");
var p4=$("#c4").prop("checked");
var p5=$("#c5").prop("checked");
var p6=$("#c6").prop("checked");
console.log("a1:"+a1);
console.log("a2:"+a2);
console.log("a3:"+a3);
console.log("a4:"+a4);
console.log("a5:"+a5);
console.log("a6:"+a6);
console.log("p1:"+p1);
console.log("p2:"+p2);
console.log("p3:"+p3);
console.log("p4:"+p4);
console.log("p5:"+p5);
console.log("p6:"+p6);
</script>
</body>
</html>
结果如下:
可以看到使用attr去获取标签的固有属性的时候,返回的是undefined。而prop返回的是true或者false。
那么什么时候使用atrr什么时候使用prop呢:
总结如下:
* 添加属性名称就能够生效的时候使用prop,比如checked和selected
具有true和false两个返回值的属性使用prop方法
对于HTML元素本身就带有的固有属性,在处理时,使用prop方法
对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法