The DOM should contain nothing other than:
- noscript with original.
- empty placeholder span that reserves the correct dimensions and has and data attributes about the image.
The spinner can be applied with a css class to the lazy-image-placeholder class by default (until loaded). Or, if current logic limits it to being its own element, it can be appended to the placeholder at run time (raced against actual lazy loading to avoid conflicts - perhaps using requestAnimationFrame when available).
When lazy loading the image, the placeholder can be atomically swapped to avoid extra repaint cycles. E.g. $placeholder.replaceWith($image). It also allows the placeholder to be natively garbage collected.