Javascript: Странное поведение пробела в многострочной строковой переменной, содержащей другую встроенную многострочную строковую переменную - PullRequest
1 голос
/ 16 февраля 2020

Я пытаюсь создать фрагменты кода и вывести их с помощью буфера обмена. 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 для каждого контекста, в котором он будет выводиться Я могу это сделать, но, кроме того, что он хакерский, я не понимаю, что такое пробельное поведение, которое очень раздражает.

Буду признателен за любую помощь в том, как мне избежать хакерского обходного пути, или даже объяснение было бы здорово.

...