8

I'm looking to vertically align text by adding <br /> tags between characters with jQuery.

<div id="foo"><label>Vertical Text</label></div> 

would look like this:

V
e
r
t
i
c
a
l

T
e
x
t

Joel
  • 19,175
  • 2
  • 63
  • 83
Parrfolio
  • 157
  • 1
  • 4
  • 9

6 Answers6

26

Let's go golfing!

$('#foo label').html($('#foo label').text().replace(/(.)/g,"$1<br />"));

Completely untested, but the pattern in the regex looks like a boob.

MrKurt
  • 5,080
  • 1
  • 23
  • 22
4

Mr Kurt's answer works well for a single id, but if you want something more useful that can be applied to several elements try something like this:

$.each( $(".verticalText"), function () { $(this).html($(this).text().replace(/(.)/g, "$1<br />")) } );

Then just set class="verticalText" on the elements you want to be formatted like this.

And as a bonus it keeps the boob regex.

Code Commander
  • 16,771
  • 8
  • 64
  • 65
3

Not tested, but it should work.

var element = $( '#foo label' );
var newData = '';
var data = element.text();
var length = data.length;
var i = 0;

while( i < length )
{

    newData += data.charAt( i ) + '<br />';
    i++;

}

element.html( newData );
okoman
  • 5,529
  • 11
  • 41
  • 45
3

document.write("vertical text".split("").join("<br/>"));

Edit: Hole in one!

Incognito
  • 20,537
  • 15
  • 80
  • 120
1

This builds on Sebastian H's answer, but I tested it and this works

    var element = $( '#foo label' );
    var newData = '';
    var data = element.text();
    var length = data.length;
    var i = 0;
    $( '#foo label' ).html("");
    while( i < length )
    {
            $( '#foo label' ).append(data.charAt( i ) + "<br />")
            i++;
    }
MrChrister
  • 3,555
  • 5
  • 22
  • 34
0

Why use a while loop when you can use jQuery's builtin each method?

$.each( $('#foo').text(), function(){ $('#foo').append(this + '
'); } );

There. It works. You can test it.

picardo
  • 24,530
  • 33
  • 104
  • 151