要素の属性を全部取得する

例えば

<div data-foo="a" data-bar="b" data-baz="c">...</div>

みたいに任意のカスタムデータ属性がついてて、こっから

{ foo: 'a', bar: 'b', baz: 'c' }

みたいなデータを作りたいので属性を全部取得したいんだけど、 jQuery ではできないっぽい。

DOMの element.attributes を使えばいける。

var div = document.querySelector('div');
var attrs = div.attributes;
for (var i = 0, len = attrs.length; i < len; i++) {
  console.log(attrs[i].name); //=> data-foo, data-bar, data-baz
  console.log(attrs[i].value); //=> a, b, c
}

ほぼ使いどころないけど jQuery プラグインで書くんだったらこんな感じだろうか

$.fn.attrAll = function() {
  var ret = {};
  var attrs = this.get(0).attributes;
  var attr;
  for (var i = 0, len = attrs.length; i < len; i++) {
    attr = attrs[i];
    ret[attr.name] = attr.value;
  }
  return ret;
};
console.log( $('div').attrAll() ); // { data-foo: 'a', data-bar: 'b', data-baz: 'c' }

追記: data() でできた