Я пытаюсь создать фрагменты кода и вывести их с помощью буфера обмена. js. Мне нужно сохранить пробел в строке, чтобы сохранить отступы кода. Я предоставляю код ниже в ES5 - поведение в ES6 такое же, как для строковых литералов. Например, у меня есть это:
var foo = '<td align="left" valign="top">\n <img src="img/blob.jpg />\n</td>';
, которое выводит это на консоль:
<td align="left" valign="top">
<img src="img/blob.jpg />
</td>
Но когда я встраиваю 'foo' в другой фрагмент кода, подобный этому:
'<table border="0" cellpadding="0" cellspacing="0">' + '\n <tr>' + '\n ' + foo + '\n </tr>' + '\n</table>';
Я получаю это в консоли:
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="center" valign="top">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left" valign="top">
<img src="img/blob.jpg />
</td>
</tr>
</table>
</td>
</tr>
</table>
Я пробовал использовать неразрывный пробел Unicode \ xa0 вместо пробела - без разницы. У меня есть обходной путь, то есть:
foo = foo.replace('<img', ' <img');
foo = foo.replace('</td', ' </td');
, который выводит это:
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left" valign="top">
<img src="img/blob.jpg />
</td>
</tr>
</table>
Но это требует, чтобы я манипулировал пробелами для каждой выходной строки по-разному, что означает, что если у меня есть внедрив таблицу в другую таблицу, я манипулировал 'foo' условными операторами if-then для каждого контекста, в котором он будет выводиться Я могу это сделать, но, кроме того, что он хакерский, я не понимаю, что такое пробельное поведение, которое очень раздражает.
Буду признателен за любую помощь в том, как мне избежать хакерского обходного пути, или даже объяснение было бы здорово.