Spec-Zone.ru › jQuery

.attr()

Получить значение атрибута для первого элемента в наборе совпавших элементов или установить один или несколько атрибутов для каждого совпавшего элемента.

Содержание:

  • .attr( attributeName )
    • .attr( attributeName )
  • .attr( attributeName, value )
    • .attr( attributeName, value )
    • .attr( attributes )
    • .attr( attributeName, function )

.attr( attributeName )Возвращает: Строка

Описание: Получить значение атрибута для первого элемента в наборе совпавших элементов.

  • версия добавлена: 1.0.attr( attributeName )

    • attributeName
      Тип: Строка
      Имя атрибута для получения.

Метод .attr() получает значение атрибута только для первого элемента в наборе совпавших элементов. Чтобы получить значение для каждого элемента индивидуально, используйте цикл, например, метод jQuery .each() или .map().

Использование метода jQuery .attr() для получения значения атрибута элемента имеет две основные преимущества:

  1. Удобство: его можно вызывать непосредственно на объекте jQuery и объединять с другими методами jQuery.
  2. Согласованность в разных браузерах: значения некоторых атрибутов сообщаются несогласованно в разных браузерах, а даже в разных версиях одного браузера. Метод .attr() уменьшает такие несоответствия.

Примечание: Значения атрибутов являются строками за исключением нескольких атрибутов, таких как value и tabindex.

Начиная с jQuery 1.6, метод .attr() возвращает undefined для атрибутов, которые не были установлены. Для извлечения и изменения свойств DOM, таких как checked, selected, или disabled состояние элементов формы, используйте метод .prop().

Атрибуты против свойств

Разница между атрибутами и свойствами может быть важна в конкретных ситуациях. До jQuery 1.6, метод .attr() иногда учитывал значения свойств при извлечении некоторых атрибутов, что могло привести к несогласованному поведению. Начиная с jQuery 1.6, метод .prop() предоставляет способ явного извлечения значений свойств, в то время как .attr() извлекает атрибуты.

Например, selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, и defaultSelected должны извлекаться и устанавливаться с помощью метода .prop(). До jQuery 1.6 эти свойства извлекались с помощью метода .attr(), но это не входило в область применения attr. У них нет соответствующих атрибутов, и они являются только свойствами.

Что касается булевых атрибутов, рассмотрим элемент DOM, определенный HTML-разметкой <input type="checkbox" checked="checked" />, и предположим, что он находится в переменной JavaScript с именем elem.

elem.checked true (Булево) Будет изменяться при изменении состояния флажка
$( elem ).prop( "checked" ) true (Булево) Будет изменяться при изменении состояния флажка
elem.getAttribute( "checked" ) "checked" (Строка) Начальное состояние флажка; не изменяется
$( elem ).attr( "checked" ) (1.6+) "checked" (Строка) Начальное состояние флажка; не изменяется
$( elem ).attr( "checked" ) (до 1.6) true (Булево) Изменяется при изменении состояния флажка

Согласно спецификации форм W3C https://www.w3.org/TR/html401/interact/forms.html#h-17.4, атрибут checked является булевым атрибутом, что означает, что соответствующее свойство равно true, если атрибут вообще присутствует — даже если, например, у атрибута нет значения или он установлен на пустую строку или даже на "false". Это верно для всех булевых атрибутов.

Тем не менее, самый важный момент, который нужно запомнить об атрибуте checked заключается в том, что он не соответствует свойству checked. Атрибут фактически соответствует свойству defaultChecked и должен использоваться только для установки начального значения флажка. Значение атрибута checked не изменяется при изменении состояния флажка, а свойство checked изменяется. Следовательно, кроссбраузерный способ определения того, что флажок выбран, заключается в использовании свойства:

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

То же самое верно для других динамических атрибутов, таких как selected и value.

Дополнительные примечания:

  • В Internet Explorer до версии 9 использование .prop() для установки свойства элемента DOM на что-либо, кроме простого примитивного значения (число, строка или булево), может привести к утечкам памяти, если свойство не удалено (с помощью .removeProp()) перед удалением элемента DOM из документа. Для безопасной установки значений на объекты DOM без утечек памяти используйте .data().

Примеры:

Отобразить атрибут и свойство 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-3.7.0.js"></script>
</head>
<body>
 
<input id="check1" type="checkbox" checked="checked">
<label for="check1">Check me</label>
<p></p>
 
<script>
$( "input" )
  .on( "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>" );
  } )
  .trigger( "change" );
</script>
 
</body>
</html>

Демо:

Найти атрибут title первого <em> на странице.

<!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-3.7.0.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>

Демо:

.attr( attributeName, value )Возвращает: jQuery

Описание: Установить одно или несколько атрибутов для набора сопоставленных элементов.

  • версия добавлена: 1.0.attr( attributeName, value )

    • attributeName
      Тип: Строка
      Имя атрибута, который нужно установить.
    • value
      Тип: Строка или Число или Null
      Значение для установки атрибута. Если null, указанный атрибут будет удалён (как в .removeAttr()).
  • версия добавлена: 1.0.attr( attributes )

    • attributes
      Тип: Объект
      Объект пар атрибут-значение для установки.
  • версия добавлена: 1.1.attr( attributeName, function )

    • attributeName
      Тип: Строка
      Имя атрибута, который нужно установить.
    • function
      Тип: Функция( Целое число индекс, Строка атрибут ) => Строка или Число
      Функция, возвращающая значение для установки. 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' всегда используйте кавычки!

Примечание: Попытка изменить атрибут type на элементе input или button, созданном с помощью document.createElement(), вызовет исключение в 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-3.7.0.js"></script>
</head>
<body>
 
<img>
<img>
<img>
 
<div><b>Attribute of Ajax</b></div>
 
<script>
$( "img" ).attr({
  src: "/resources/hat.gif",
  title: "jQuery",
  alt: "jQuery Logo"
});
$( "div" ).text( $( "img" ).attr( "alt" ) );
</script>
 
</body>
</html>

Демо:

Установить id для div'ов в зависимости от их позиции на странице.

<!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-3.7.0.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>

Демо:

Установить атрибут src из атрибута title на изображении.

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

Демо:

© The jQuery Foundation and other contributors
Licensed under the MIT License.
https://api.jquery.com/attr

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API