70

这有效:

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

但这不会:

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

我在这里错过了一些非常明显的东西吗?

4

3 回答 3

148

当然,像这样:

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

就像.attr()文档状态:

一次设置多个属性

要同时更改 alt 属性并添加 title 属性,请使用纯 JavaScript 对象一次将两组名称和值传递给方法。对象中的每个键值对添加或修改一个属性:

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

设置多个属性时,属性名称周围的引号是可选的。

于 2013-05-07T15:19:06.220 回答
7

是的,可以设置多个属性,只需使用简单的 Object 文字语法。例子:

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

有关 attr 方法的更多信息可以在这里找到。

于 2013-05-07T15:19:44.537 回答
2

很抱歉在这么多年后发布一个已经解决的问题的答案。

我只是想用推荐的解决方案[需要引用]使线程保持最新状态。

从 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
于 2019-06-11T05:34:12.523 回答