如何使用javascript返回数据属性数组?

时间:2013-10-02 01:47:21

标签: javascript coffeescript

请原谅我糟糕的javascript知识。

我正在尝试返回一组ID值,例如[1,2,4],来自标记为“已选中”的DOM元素。

<tr data-selected = 'true' data-id = '1'></tr>
<tr data-selected = 'true' data-id = '2'></tr>
<tr data-selected = 'false' data-id = '3'></tr>
<tr data-selected = 'true' data-id = '4'></tr>

我尝试为此

创建coffeescript函数
elems = $("tr[data-selected ='true']").data("id")    
alert( elems )

这似乎只返回最后一个元素的data-id值。

如何创建所有ID值的数组?

2 个答案:

答案 0 :(得分:7)

尝试

$('tr[data-selected="true"]').map(function(){
    return $(this).data('id');
}).get();

<强> Demo

当您在返回多个项目的选择器上使用attr / data时,它将仅从第一个匹配的元素中获得结果。因此,使用.map获取特定的dat attrib值并从jquery对象集合转换为数组。

原因在于.attr/data的实施方式。

// Gets
bulk ?
    fn.call( elems ) :
    length ? fn( elems[0], key ) : emptyGet; //<-- snippet from jquery just considers the first element.

答案 1 :(得分:0)

你也可以使用.each函数

$(document).ready(function(){
  var ids = [];
  elems = $("tr[data-selected=true]").each(function(){
   ids.push($(this).attr('data-id'));
  });
console.log(ids);
})

<tr data-selected = 'true' data-id = '1'></tr>
<tr data-selected = 'true' data-id = '2'></tr>
<tr data-selected = 'false' data-id = '3'></tr>

http://jsbin.com/iqEYAPI/1/edit