shownBlocks[0] returns a dom element reference which do not have replaceWith() method which is provided by jQuery wrapper, you can use .eq() method which return a jQuery wrapper reference to an element based on the passed index then call replaceWith()
$("#start").click(function () {
var shownBlocks = $("div.block:not('.s8-item-hidden')");
var hiddenBlocks = $("div.container > div.s8-item-hidden");
shownBlocks.eq(0).replaceWith(hiddenBlocks[0]);
shownBlocks.eq(1).replaceWith(hiddenBlocks[1]);
});
Demo: Fiddle
--
$("#start").click(function () {
var shownBlocks = $("div.block:not('.s8-item-hidden')");
var hiddenBlocks = $("div.container > div.s8-item-hidden");
shownBlocks.replaceWith(function (i) {
return $(hiddenBlocks).show();
})
});
Demo: Fiddle