Чтобы у тебя заработало, делай не
$(this).data('quantity', $(this).parent().find('input.qty').val() );
а
$(this).attr('data-quantity', $(this).parent().find('input.qty').val() );
Если хочешь понять почему у тебя работает не так, почитай вот тут документацию
https://api.jquery.com/data/#data2
Description: Return arbitrary data associated with the first element in the jQuery collection, as set by data() or by an HTML5 data-* attribute.
Смысл в том что метод data() в jquery устанавливает значение в рамках своего хранилища, для переданного элемента, а не в атрибут html элемента. А при получении значения этим методом, возвращает в приоритете значение data атрибута элемента, а если его нет - ищет в своем хранилище.