Я не гуру, это точно ... но мне кажется, что два очевидных различия - это время / среда, когда заданы «данные», и структура (тип) данных, которые будут быть сохраненным / доступным.
Примите во внимание этот сценарий:
<a id="foo" data-me="some string data" href="#">foo!</a
Этот кусок HTML может быть сгенерирован на стороне сервера. Если это так, только источник на стороне сервера должен знать о происхождении значения data-me. Одним из ограничений является то, что атрибут должен быть строкой или строковым представлением объекта (JSON)
var customData =
{
date:new Date(),
otherProp:'some value',
someFunc: function(a,b)
{
// function dody
}
};
$('#foo').attr('data-me', customData)
Из javascript (среднего), в определенный момент, вызванного определенным событием (временем), вы можете использовать jQuery для привязки элемента dom к данному объекту (необязательно строке)
Таким образом, последний способ ($ ('# foo'). Attr ('data-me', customData)) снимает ограничение 'only string' и позволяет связывать с элементом dom любой тип объекта js, четные функции.