This is the only thing I can think of then. Just shows / hides each letter one at a time.
It will only become html once the text is fully loaded.
$(".expander").each(function(e) {
var expanded = false,
isExpanding = false,
$this = $(this).text("[More...]");
$this.click(function() {
if(!isExpanding) {
isExpanding = true;
if(!expanded) {
var i = 0,
interval = setInterval(function() {
if(i < $this.prev().text().length) {
$this.prev().prev().text($this.prev().text().substring(0, i));
i++;
} else {
$this.prev().prev().html($this.prev().html());
clearInterval(interval);
isExpanding = false;
}
}, 1000 / 60);
} else {
var i = $this.prev().text().length - 1,
interval = setInterval(function() {
if(i >= 0) {
$this.prev().prev().text($this.prev().text().substring(0, i));
i--;
} else {
clearInterval(interval);
isExpanding = false;
}
}, 1000 / 60);
}
expanded = !expanded;
}
});
}).prev().before("<span></span>").hide();
Demo