Easy concatenation in Javascript
When developing stuff in Javascript and jQuery you often need to concat lots of HTML for output. That gets ugly pretty fast.
$("#mydiv").html('<div id="lightbox-container-image-data-box">' +
this.something + '<div id="lightbox-container-image-data"><div' +
'id="lightbox-image-details"><span id="lightbox-image-details-caption">' +
v + '</span><span id="lightbox-image-details-currentNumber"></span>' +
'</div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnClose">' +
'<img src="'+settings.imageBtnClose+'">');
There are a few different ways to concat strings in Javascript and make your code more readable.
Using the + operator:
var html = "<table>" +
"<tr>" +
"<td>" +
"</td>" +
"</tr>" +
"</table>";
I don’t like this notation. To make it readable you need an extra space after the closing " and you can’t nicely line up all the strings.
Another way is using the Array.join("") method:
var html = [
"<table>",
"<tr>",
"<td>",
"</td>",
"</tr>",
"</table>"
].join("");
This has the disadvantage that you need a method at the end of the array, and in modern browsers it is a little slower than native concatting.
Another way is using the String.concat() method
var html = (new String("")).concat(
"<table>",
"<tr>",
"<td>",
"</td>",
"</tr>",
"</table>"
);
I especially like this last method. Unfortunately the syntax is a little clunky. My colleague Frank suggested a slightly different notation
var html = ''.concat(
"<table>",
"<tr>",
"<td>",
"</td>",
"</tr>",
"</table>"
);
This is valid because '' is equivalent to (new String(“”)). This works great and makes passing HTML as an argument to jQuery methods a lot more readable:
$("#mydiv").html(''.concat(
'<table>",
'<tr><td>',
'</td></tr>',
'</table>'
));