prop()
函数用于
设置或返回当前jQuery对象所匹配的元素的属性值
。
该函数属于
jQuery
对象(实例)。如果需要删除DOM元素的属性,请使用
removeProp()
函数。
语法
jQuery
1.6 新增
该函数。
prop()
函数有以下两种用法:
用法一
:
jQueryObject.prop( propertyName [, value ] )
设置或返回指定属性
propertyName
的值。如果指定了
value
参数,则表示设置属性
propertyName
的值为
value
;如果没有指定
value
参数,则表示返回属性
propertyName
的值。
参数
value
还可以是函数,
prop()
将根据匹配的所有元素遍历执行该函数,函数中的
this
指针将指向对应的DOM元素。
prop()
还会为函数传入两个参数:第一个参数就是该元素在匹配元素中的索引,第二个参数就是该元素
propertyName
属性当前的值。函数的返回值就是为该元素的
propertyName
属性设置的值。
用法二
:
jQueryObject.prop( object )
以对象形式同时设置任意多个属性的值。对象
object
的每个属性对应
propertyName
,属性的值对应
value
。
注意
:
prop()
函数的所有”设置属性”操作针对的是当前jQuery对象所匹配的
每一个
元素;所有”读取属性”的操作只针对
第一个
匹配的元素。
参数
请根据前面语法部分所定义的
参数名称
查找对应的参数。
参数 | 描述 |
---|---|
propertyName |
String类型 指定的属性名称。 |
value |
可选/Object/Function类型 指定的属性值,或返回属性值的函数。 |
object |
Object类型 指定的对象,用于封装多个键值对,同时设置多项属性。 |
参数
value
可以是包括对象和数组在内的任意类型。
返回值
prop()
函数的返回值是
任意类型
,返回值的类型取决于当前
prop()
函数执行的是”设置属性”操作还是”读取属性”操作。
如果
prop()
函数执行的是”设置属性”操作,则返回当前jQuery对象本身;如果是”读取属性”操作,则返回读取到的属性值。
如果当前jQuery对象匹配多个元素,返回属性值时,
prop()
函数只以其中第一个匹配的元素为准。如果该元素没有指定的属性,则返回
undefined
。
prop()和attr()的主要区别
:
prop()
函数针对的是DOM元素(JS Element对象)的属性,
attr()
函数针对的是DOM元素所对应的文档节点的属性。详情请查看
jQuery函数attr()和prop()的区别
。
注意事项
1、如果通过
prop()
函数更改<input>和<button>元素的
type
属性,在多数浏览器上将会抛出一个错误,因为该属性一般不允许在后期更改。
2、如果使用
prop()
函数操作表单元素的
checked
、
selected
、
disabled
等属性,如果该元素被选中(或禁用),则返回
true
,否则(意即HTML中没有该属性)返回
false
。
3、
prop()
函数还可以设置或返回DOM元素的
Element
对象上的某些属性,例如:tagName、selectedIndex、nodeName、nodeType、ownerDocument、defaultChecked和defaultSelected等属性。
4、在IE9及更早版本中,如果使用
prop()
函数设置的属性值不是一个简单的原始值(String、Number、Boolean),并且在对应的DOM元素被销毁之前,该属性没有被移除,则可能会导致内存泄漏问题。如果你只是为了存储数据,建议你使用
data()
函数,以避免内存泄漏问题。
示例&说明
以下面这段HTML代码为例:
<div id="n1">
<p id="n2" class="demo test" data-key="UUID" data_value="1235456465">CodePlayer</p>
<input id="n3" name="order_id" type="checkbox" value="1">
<input id="n4" name="order_id" type="checkbox" checked="checked" value="2">
</div>
我们编写如下jQuery代码:
var $n2 = $("#n2"); // prop()操作针对的是元素(Element对象)的属性,而不是元素节点(HTML文档)的属性 document.writeln( $n2.prop("data-key") ); // undefined document.writeln( $n2.prop("data_value") ); // undefined document.writeln( $n2.prop("id") ); // n2 document.writeln( $n2.prop("tagName") ); // P document.writeln( $n2.prop("className") ); // demo test document.writeln( $n2.prop("innerHTML") ); // CodePlayer document.writeln( typeof $n2.prop("getAttribute") ); // function // prop()设置的属性也是针对元素(Element对象),因此也可以通过元素本身直接访问 $n2.prop("prop_a", "CodePlayer"); document.writeln( $n2[0].prop_a ); // CodePlayer var n2 = document.getElementById("n2"); document.writeln( n2.prop_a ); // CodePlayer // 以对象形式同时设置多个属性,属性值可以是对象、数组等任意类型 $n2.prop( { prop_b: "baike", prop_c: 18, site: { name: "CodePlayer", url: "http://www.365mini.com/" } } ); document.writeln( $n2[0].prop_c ); // 18 document.writeln( $n2[0].site.url ); // http://www.365mini.com/ // 反选所有的复选框(没选中的改为选中,选中的改为取消选中) $("input:checkbox").prop("checked", function(index, oldValue){ return !oldValue; });