jQuery的attr和prop

2017-12-07  本文已影响0人  万色星辰

概述

做项目过程中,你可可能会发现使用attr将checkbox设置checked并不能生效了,这是因为在jQuery1.6开始新增了一个方法 prop()。

概念

prop在官方文档中的解释是:获取匹配的元素集中第一个元素的属性(property)值或设置每一个匹配元素的一个或多个属性。

Attributes vs Properties

attributes和properties之间的差异在特定情况下是很重要。jQuery 1.6之前 ,.attr()方法在取某些 attribute 的值时,会返回 property 的值,这就导致了结果的不一致。从 jQuery 1.6 开始, .prop()方法 方法返回 property 的值,而 .attr() 方法返回 attributes 的值。

例如, selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, 和 defaultSelected 应使用.prop()方法进行取值或赋值。 在jQuery1.6之前,这些属性使用.attr()方法取得,但是这并不是元素的attr属性。他们没有相应的属性(attributes),只有特性(property)。
例如,考虑一个DOM元素的HTML标记中定义的 ,并假设它是一个JavaScript变量命名的elem :

elem.checked true (Boolean) 将随着复选框状态的改变而改变
$(elem).prop(“checked”) true (Boolean) 将随着复选框状态的改变而改变
elem.getAttribute(“checked”) “checked” (String) 复选框的初始状态;不会改变
$(elem).attr(“checked”) (1.6) “checked” (String) 复选框的初始状态;不会改变
$(elem).attr(“checked”) (1.6.1+) “checked” (String) 将随着复选框状态的改变而改变
$(elem).attr(“checked”) (pre-1.6) true (Boolean) 将随着复选框状态的改变而改变

prop

.prop()方法设置属性值非常方便,尤其是对于需要使用一个函数设置多个属性值或是一次性设置多个属性值的情况。当设置selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, 或 defaultSelected必须使用这个方法。从jQuery1.6开始,这些属性可以不再使用.attr()方法来设置。他们没有相应的属性(attributes),只有属性(property)。

Properties 属性一般影响 DOM 元素的动态状态并不会改变序列化的 HTML attribute 属性。例如,input 元素的 value 属性,input 和 按钮 元素的 disabled 属性, 以及 checkbox 的 checked 属性。应该使用 .prop() 方法设置 disabled 和 checked 属性,而不是使用 .attr() 方法。 .val() 方法应该用于存取 value 值。

例子

所以我们再设置checkbox的checked时,使用prop就可以正常设置了。

$(“#chekbox”).prop(“checked”,true);
$(“#chekbox”).prop(“checked”,false);

API文档链接:http://api.jquery.com/prop/

上一篇下一篇

猜你喜欢

热点阅读