当前位置: 首页 > 中文手册 > jQuery.attr() 函数详解

jQuery.attr() 函数详解

attr()函数用于设置或返回当前jQuery对象所匹配的元素节点的属性值

该函数属于jQuery对象(实例)。如果需要删除DOM元素节点的属性,请使用removeAttr()函数。

语法

attr()函数有以下两种用法:

用法一

jQueryObject.attr( attributeName [, value ] )

设置或返回指定属性attributeName的值。如果指定了value参数,则表示设置属性attributeName的值为value;如果没有指定value参数,则表示返回属性attributeName的值。

参数value还可以是函数,attr()将根据匹配的所有元素遍历执行该函数,函数中的this指针将指向对应的DOM元素。attr()还会为函数传入两个参数:第一个参数就是该元素在匹配元素中的索引,第二个参数就是该元素attributeName属性当前的值。函数的返回值就是为该元素的attributeName属性设置的值。

用法二

jQueryObject.attr( object )

以对象形式同时设置任意多个属性的值。对象object的每个属性对应attributeName,属性的值对应value

注意attr()函数的所有"设置属性"操作针对的是当前jQuery对象所匹配的每一个元素;所有"读取属性"的操作只针对第一个匹配的元素。

参数

请根据前面语法部分所定义的参数名称查找对应的参数。

参数描述
attributeNameString类型指定的属性名称。
value可选/String/Function类型指定的属性值,或返回属性值的函数。
objectObject类型指定的对象,用于封装多个键值对,同时设置多项属性。

如果参数value既不是函数类型,也不是字符串类型,则会调用toString()方法,将其转为字符串。

返回值

attr()函数的返回值是任意类型,返回值的类型取决于当前attr()函数执行的是"设置属性"操作还是"读取属性"操作。

如果attr()函数执行的是"设置属性"操作,则返回当前jQuery对象本身;如果是"读取属性"操作,则返回读取到的属性值。

如果当前jQuery对象匹配多个元素,返回属性值时,attr()函数只以其中第一个匹配的元素为准。如果该元素没有指定的属性,则返回undefined

prop()和attr()的主要区别prop()函数针对的是DOM元素(JS Element对象)的属性,attr()函数针对的是DOM元素所对应的文档节点的属性。详情请查看jQuery函数attr()和prop()的区别

注意事项

1、attr()函数在操作少数属性时可能会出现异常情况,例如valuetabindex属性。

2、如果通过attr()函数更改<input>和<button>元素的type属性,在多数浏览器上将会抛出一个错误,因此该属性一般不允许在后期被更改。

3、尽量不要使用attr()操作表单元素的checked、selected、disabled属性。

在jQuery 1.6之前,attr()函数在检索某些属性(例如checked、selected、disabled等)时会考虑属性的值。以<input>元素的checked属性为例,如果该元素被选中,则返回true,否则(也就是没有checked属性)返回false

从jQuery 1.6开始,对于没有的属性,attr()函数一律返回undefined。同样以<input>元素为例,如果该元素被选中,则attr("checked")返回checked(字符串);否则(即没有checked属性)返回undefined。甚至在某些版本(例如1.6和1.11.1)中,attr("checked")只返回该元素初始化时的"checked"状态值,之后即使更改了选中状态,attr("checked")的返回值也不会改变。

因此请尽量不要使用attr()函数操作表单元素的checkedselecteddisabled等属性,在jQuery 1.6及之后的版本中,你应该使用prop()函数。

4、在jQuery 1.6之前,attr()函数还可以设置或返回DOM元素的Element对象上的某些属性,例如:tagName、selectedIndex、nodeName、nodeType、ownerDocument、defaultChecked和defaultSelected等属性。但是这些属性不属于元素的DOM属性范畴,从jQuery 1.6开始,你不能再使用attr()函数进行上述属性的操作,你应该使用prop()函数。

示例&说明

以下面这段HTML代码为例:

<div id="n1">
    <p id="n2" data-id="25">CodePlayer</p>
    <input id="n3" name="name" type="text" label="姓名" >
    <img id="n4" alt="CodePlayer" src="/image/blank.gif" >
    <img id="n5" alt="站点logo" title="专注于编程开发技术分享" src="http://localhost/static/image/site-url.png" >
    <ul id="n6">
    	<li id="n7" uid="21">item1</li>
    	<li id="n8" uid="23">item2</li>
    	<li id="n9" uid="35">item3</li>
    </ul>
</div>

我们编写如下jQuery代码:

//设置n4(img元素)的src属性值
$("#n4").attr("src", "http://localhost/static/image/site-name.png");

var $n2 = $("#n2");
// 获取n2的data-id属性的值
document.writeln( $n2.attr("data-id") ); // 25
// 获取n2的myAttr属性的值,没有该属性,返回undefined
document.writeln( $n2.attr("myAttr") ); // undefined

//只返回第一个匹配元素的uid属性的值
document.writeln( $("li").attr("uid") ); // 21

// 以对象形式同时设置所有img元素的多个属性值
$("img").attr( { height: 180, width: 180, "class": "img-box" } );
document.writeln( $("#n5").attr("height") ); // 180

// 设置所有img元素的title属性值:
// 1.如果该元素已经有了title属性,则不作改变
// 2.如果该元素之前没有title属性,则设置title属性等于它的alt属性
$("img").attr("title", function(index, attrValue){
    // 这里的this表示当前DOM元素
	return attrValue== undefined ? this.alt : attrValue;	
});

运行代码

107 11
我们认为: 用户的主要目的,是为了获取有用的信息,而不是来点击广告的。因此本站将竭力做好内容,并将广告和内容进行分离,确保所有广告不会影响到用户的正常阅读体验。用户仅凭个人意愿和兴趣爱好点击广告。
我们坚信:只有给用户带来价值,用户才会给我们以回报。
CodePlayer技术交流群1CodePlayer技术交流群1

帮朋友打一个硬广告:

P2P网贷系统(Java版本) 新年低价大促销,多年P2P技术积累,系统功能完善(可按需定制,可支持第三方存管、银行存管),架构稳定灵活、性能优异、二次开发快速简单。 另可提供二次开发、安装部署、售后维护、安全培训等一条龙服务。

外行看热闹,内行看门道。可以自信地认为,在系统设计上,比市面上的晓风、迪蒙、方维、绿麻雀、国融信、金和盛等P2P系统要好。
深圳地区支持自带技术人员现场考察源代码、了解主要技术架构,货比三家,再决定是否购买。

也可推荐他人购买,一旦完全成交,推荐人可获得实际售价 10% 的返现。
有意向者,详情请 点击这里 联系,工作时间立即回复。