是否可以使用jQuery.attr()函数设置多个数据属性?

时间:2013-05-07 15:17:38

标签: javascript jquery

这有效:

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

但这不是:

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

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

3 个答案:

答案 0 :(得分:121)

当然,像这样:

$(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'
});
     

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

答案 1 :(得分:4)

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

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

有关attr方法的更多信息,请访问here

答案 2 :(得分:0)

很抱歉,这么多年以来,对于已经解决的问题发布了答案。

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

自jQuery 1.2.3起,就有一个.data()函数接受参数来获取/设置数据属性(自1.4.3起可以设置多个值),如下所示:

template <typename T, template <typename> class... Predicates>
using where_t = std::enable_if_t<std::conjunction_v<Predicates<T>...>>;

template <typename T, typename = where_t<T, std::is_default_constructible, std::is_class>>
struct my_struct
{
};

必须注意,使用/* ** 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 设置数据属性不会更新DOM,因此您无法在DOM检查器中看到它们。而且,它们与.data()不交叉兼容。但是,可以用.attr()来检索用.attr()设置的数据属性(简而言之,可以用.data()检索以'data-'开头的任何属性)。 < / strong>

.data()