Можно ли установить несколько атрибутов данных с помощью функции jQuery.attr()?

Это работает:

$(myObj).attr("data-test-1", num1);
$(myObj).attr("data-test-2", num2);

Но это не так:

$(myObj).attr({
  data-test-1: num1,
  data-test-2: num2
});

Я пропустил что-то действительно очевидное здесь?

Ответ 1

Конечно, вот так:

$(myObj).attr({"data-test-1": num1, "data-test-2": num2});

Как и .attr(), docs:

Установка нескольких атрибутов сразу

Чтобы изменить атрибут alt и добавить атрибут title в то же самое время, одновременно передавайте оба набора имен и значений в метод, используя простой объект JavaScript. Каждая пара значений ключа в объекте добавляет или изменяет атрибут:

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

При настройке нескольких атрибутов, цитаты вокруг имен атрибутов являются необязательными.

Ответ 2

Да, возможно установить несколько атрибутов, просто используйте простой синтаксис литерала объекта. Пример:

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

Более подробную информацию о методе attr можно найти здесь.

Ответ 3

Извините за публикацию ответа на уже решенный вопрос после стольких лет.

Я только думал о том, чтобы держать поток в курсе с рекомендуемым решением [нужная цитата] как на дате.

Начиная с jQuery 1.2.3, существует функция .data() которая принимает аргументы для получения/установки атрибутов данных (установка множественного числа была доступна начиная с 1.4.3), например:

/* 
 ** In all the example below, note that 
 ** 'data-' is removed from attribute name
 */

// Setter (single)
$('#my_image').data('test-1', 'num1');
$('#my_image').data('test-2', 'num2');

// Setter (multiple)
$('#my_image').data({'test-1':'num1', 'test-2':'num2'});

// Getter (single)
$('#my_image').data('test-1');    // num1
$('#my_image').data('test-2');    // num2

Следует отметить, что установка атрибутов данных с помощью .data() не обновляет DOM, поэтому их нельзя увидеть в инспекторе DOM. Кроме того, они несовместимы с .attr(). Однако атрибуты данных, установленные с помощью .attr() могут быть получены с помощью .data() (короче говоря, любые атрибуты, начинающиеся с 'data-', могут быть получены с помощью .data()).

// Setter
$('#my_image').attr('data-test-3', 'num3');    // note the 'data-' on attr name

// Getter
$('#my_image').data('test-3');    // num3