.attr()| jqueryAPI 2.2 中文手册- AspRain.cn 致力于Web开发技术翻译整理

jQuery API 2.2.0

.attr()

分类:元素属性 | 操纵 > 一般元素属性

返回: String

.attr( attributeName )

描述:取得匹配的元素集合中第一个元素的某个元素属性的值。

加入于: 1.0
.attr( attributeName )
  • attributeName
    类型:String
    要获得的元素属性的名称。

.attr()方法只获得匹配的集合中第一个元素的该元素属性值。要想逐个获得第个元素的值,请使用循环结构,比如说jQuery的.each()方法或者.map()方法。

使用jQuery的.attr()方法获得一个元素元素属性值,有两个优点:

  1. 方便性它可以直接在jQuery对象上调用,并连缀到别的jQuery方法。
  2. 跨浏览器一致性:一些元素属性的值被报告会为跨浏览器不一致,甚至在同一个浏览器的不同的版本也不一致。该.attr()方法消除了这些不一致。

注意:元素属性值是一个字符串,除了个别元素属性是例外,比如说tabindex和value的值。

自从jQuery 1.6版,对于还没有设置的元素属性,.attr()方法返回undefined要检索并改变DOM属性,比如说表单元素的checkedselected或者disabled的状态,请使用.prop()方法。

Attributes对比Properties

attributesproperties两个概念的区别,在某些特定场景中很重要。自从jQuery 1.6版.attr()方法有时候在企图取得一些attributes的时候,会读取property的值,它导致了一些不一致的行为。自从jQuery 1.6版.prop()方法提供了一个明确检索property值的方法,与此同时.attr()只读取attributes。

举个例子,selectedIndextagNamenodeNamenodeTypeownerDocumentdefaultCheckeddefaultSelected必须通过.prop()方法来检索或设置。在jQuery 1.6以前的版本中,这些属性曾经用.attr()方法获取,但是这并不在attr的范围内。这些没有对象的attributes,只有properties。

对于布尔元素属性,考虑一个用HTML元素标签<input type="checkbox" checked="checked" />定义DOM元素,假定它在JavaScript变量elem中:

elem.checkedtrue (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) 与勾选框的状态一起改变

根据W3C表单规范文档checked属性是一个布尔元素属性,这意味着如果相应的元素属性存在的话,它对应的属性值是True也就是说,如果该元素属性没有值或者被设置为空字符串,该属性值就是false。对所有的布尔元素属性都是这样的。

>

然而,关于元素属性checked最需要记住的概念是它并不对应于checked属性。该元素属性实际上对应于defaultChecked属性,而且只能用来设置勾选框的初始值。元素属性checked的值并不会改变勾选框的状态,与此同时,checked属性能够改变勾选框的状态。因此,要确定勾选框是否被勾选中的跨浏览器兼容的方法是使用属性:

  • if ( elem.checked )
  • if ( $( elem ).prop( "checked" ) )
  • if ( $( elem ).is( ":checked" ) )

对于动态的元素属性也一样,比如说selectedvalue的属性。

其它说明

  • 在Internet Explorer 9以前的版本中,使用.prop()把一个DOM元素的属性设置成除了简单的原始值(数字、字符串或者布尔值)之外的值,如果在DOM元素从document删除之前,该属性还没有被删除(用.removeProp()方法),可能导致内存泄漏。要想安装地在一个DOM对象上设置值,而不导致内存泄漏,请使用.data()方法。

示例

在勾选框的勾选状态改变的时候,显示元素属性checked和属性checked。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>attr demo</title>
  <style>
  p {
    margin: 20px 0 0;
  }
  b {
    color: blue;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<input id="check1" type="checkbox" checked="checked">
<label for="check1">Check me</label>
<p></p>
 
<script>
$( "input" )
  .change(function() {
    var $input = $( this );
    $( "p" ).html( ".attr( 'checked' ): <b>" + $input.attr( "checked" ) + "</b><br>" +
      ".prop( 'checked' ): <b>" + $input.prop( "checked" ) + "</b><br>" +
      ".is( ':checked' ): <b>" + $input.is( ":checked" ) + "</b>" );
  })
  .change();
</script>
 
</body>
</html>

演示结果

找到网页中第一个<em>的元素title属性。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>attr demo</title>
  <style>
  em {
    color: blue;
    font-weight: bold;
  }
  div {
    color: red;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<p>Once there was a <em title="huge, gigantic">large</em> dinosaur...</p>
 
The title of the emphasis is:<div></div>
 
<script>
var title = $( "em" ).attr( "title" );
$( "div" ).text( title );
</script>
 
</body>
</html>

演示结果

返回: jQuery

.attr( attributeName, value )

描述:针对每个匹配的元素设置一个或多个元素属性

加入于: 1.0
.attr( attributeName, value )
  • attributeName
    类型:String
    要设置的元素属性名
  • value
    类型:String or Number
    要设置的元素属性值
加入于: 1.0
.attr( attributes )
  • attributes
    类型:PlainObject
    要设置的元素属性名值对对象
加入于: 1.1
.attr( attributeName, function )
  • attributeName
    类型:String
    要设置的元素属性名
  • function
    类型:FunctionInteger index, String attr ) => String or Number
    一个函数,其返回值是要设置的值。this是当前元素。检索元素在集合中的位置索引,以及相应的旧元素属性值作为参数。

.attr()方法是一个用来设置元素属性值的便利的方法——特别是在设置多个元素属性或者使用由函数返回的值的时候。设想下面的图像:

<img id="greatphoto" src="brush-seller.jpg" alt="brush seller">

设置一个属性

要想改变元素属性alt,只要向.attr()方法传递元素属性名以及它的新值:

$( "#greatphoto" ).attr( "alt", "Beijing Brush Seller" );

可以用同样的方式添加一个元素属性:

$( "#greatphoto" ).attr( "title", "Photo by Kelly Clark" );

一次性设置多个属性

要想改变元素属性alt并同时添加元素属性title,只要利用一个纯JavaScript对象一次性向该方法传递两个名值集合。在对象中的每个键值对添加或者修改了一个元素属性:

$( "#greatphoto" ).attr({
  alt: "Beijing Brush Seller",
  title: "photo by Kelly Clark"
});

在设置多个元素属性的时候,元素属性名周围的引号是可有可无的。

警告:在设置元素属性“class”时,你必须总是使用引号。

注意:试图改变一个通过document.createElement()方法创建的input或者button元素上面的元素属性type,在Internet Explorer 8以及更早的版本中,将抛出一个异常。

计算元素属性值

通过使用一个用来设置元素属性的函数,你可以基于元素别的属性来计算这个值。举个例子:要想把一个将值和一个已有的值联接起来:

$( "#greatphoto" ).attr( "title", function( i, val ) {
  return val + " - photo by Kelly Clark";
});

当要一次性修改很多元素的元素属性时,这个计算元素属性的值的功能可能特别有用。

注意:如果在设置器函数(亦即,function(index, attr){})中没有返回什么值,或者返回了undefined,当前的值不会改变。当只需要对部分满足条件的元素有选择地设置值时,这个功能特别有用。

示例

为网页中所有的<img>设置元素属性值。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>attr demo</title>
  <style>
  img {
    padding: 10px;
  }
  div {
    color: red;
    font-size: 24px;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<img>
<img>
<img>
 
<div><b>Attribute of Ajax</b></div>
 
<script>
$( "img" ).attr({
  src: "sources/hat.gif",
  title: "jQuery",
  alt: "jQuery Logo"
});
$( "div" ).text( $( "img" ).attr( "alt" ) );
</script>
 
</body>
</html>

演示结果

根据div在网页中的位置,为div设置id值。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>attr demo</title>
  <style>
  div {
    color: blue;
  }
  span {
    color: red;
  }
  b {
    font-weight: bolder;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<div>Zero-th <span></span></div>
<div>First <span></span></div>
<div>Second <span></span></div>
 
<script>
$( "div" )
  .attr( "id", function( arr ) {
    return "div-id" + arr;
  })
  .each(function() {
    $( "span", this ).html( "(id = '<b>" + this.id + "</b>')" );
});
</script>
 
</body>
</html>

演示结果

根据图像的title元素属性设置src元素属性。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>attr demo</title>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<img title="hat.gif">
 
<script>
$( "img" ).attr( "src", function() {
  return "sources/" + this.title;
});
</script>
 
</body>
</html>

演示结果

如果网页上不能运行示例,请点击http://www.asprain.cn/jQueryAPI/attr.htm查看示例。

如果你觉得本文档对你有用,欢迎给翻译作者支付宝打赏,支持翻译作者源源不断翻译更多有用的技术文档。