这适用于第一场比赛:
var attributeValue = $({selector}).data("myAttribute");
但是如果我想获得所有元素选择器匹配的值,我会执行以下操作:
var attributes = [];
$.each($({selector})), function(k,v) { attributes.push($(v).data("myAttribute")); });
这感觉很愚蠢。是否有更简单的方法来获取所有元素的数据?
答案 0 :(得分:10)
我认为没有一种内置的方法来制作你想要的数组。但是你可以使用$().map()
来简化代码:
var attributes = $({selector}).map( function( i, element ) {
return $(element).data( 'myAttribute' );
});
或者,如果这可能在多个地方使用,您可以将其设为插件:
$.fn.dataArray = function( name ) {
return this.map( function( i, element ) {
return $(element).data( name );
});
};
并使用这个非常简单的代码调用它:
var attributes = $({selector}).dataArray( 'myAttribute' );
答案 1 :(得分:0)
受Michael Geary's answer above的启发,我提出了类似的解决方案。
这适用于任何想要检索数据属性并使用这些属性创建标记的人。
背景:我想从元素中检索数据属性,并使用同一动态标记中的那些数据属性动态创建html标记,以获取父级中的多个元素。这是我在阅读这篇文章后想出来的。这是一个事件时间表。
$({selector}).map(function() {
var foo = $(this).data('foo');
var bar = $(this).data('bar');
$({anotherSelector}).append('<li><a href="#0" data-foo="'+foo+'">'+bar+'</a></li>');
});