Непрерывный строковый литерал
Следующий код:
var str= "<strong>English Comprehension<\/strong>
<br\/>
<ul>
<li> Synonyms/Antonyms/Word Meaning (Vocabulary)<\/li>
<li> Complete the Sentence (Grammar)<\/li>
<li> Spot error/Correct sentence (Grammar/sentence construction)<\/li>
<li> Sentence Ordering (Comprehension skills)<\/li>
<li> Questions based on passage (Comprehension skills)<\/li>
<\/ul>
<br\/>";
Дает ошибку: "unterminated string literal". В чем проблема?
Ответы
Ответ 1
Вы не можете разделить строку на строки, подобные этим в javascript. Вы можете добиться такой же удобочитаемости, сделав каждую строку отдельной строкой и соединяя их с знаком "плюс":
var str = "<strong>English Comprehension</strong>"
+ "<br />"
+ "<ul>"
+ "<li>Synonyms/Antonyms/Word Meaning (Vocabulary)</li>"
и т.д.
Ответ 2
Если вы используете многострочную строку в JavaScript, вы должны использовать '\' в конце каждой строки:
var str = "abc\
def\
ghi\
jkl";
Также обратите внимание на дополнительные пробелы, если ваш код имеет отступ.
Ответ 3
Я предлагаю сделать это по-другому... есть скрытый элемент с этим HTML, например.
<div id="myHiddenDiv" style="display: none;"><strong>English Comprehension</strong>
<br />
...
</div>
Затем просто прочитайте свой внутренний HTML:
var str = document.getElementById("myHiddenDiv").innerHTML;
Большим преимуществом является то, что вам не придется сражаться с литеральными строками, и его намного проще редактировать, недостатком является то, что вы добавляете еще один элемент в DOM. Твой выбор.:)
Ответ 4
Невозможно написать многострочные строки в Javascript.
Но вы можете сделать это с помощью терминатора \
:
var str= "<strong>English Comprehension<\/strong>\
<br\/>\
<ul>\
<li> Synonyms/Antonyms/Word Meaning (Vocabulary)<\/li>\
<li> Complete the Sentence (Grammar)<\/li>\
<li> Spot error/Correct sentence (Grammar/sentence construction)<\/li>\
<li> Sentence Ordering (Comprehension skills)<\/li>\
<li> Questions based on passage (Comprehension skills)<\/li>\
<\/ul>\
<br\/>";
Обратите внимание, что конечные пробелы являются частью строки, поэтому лучше избавиться от них, если они не преднамерены:
var str= "<strong>English Comprehension<\/strong>\
<br\/>\
<ul>\
<li> Synonyms/Antonyms/Word Meaning (Vocabulary)<\/li>\
<li> Complete the Sentence (Grammar)<\/li>\
<li> Spot error/Correct sentence (Grammar/sentence construction)<\/li>\
<li> Sentence Ordering (Comprehension skills)<\/li>\
<li> Questions based on passage (Comprehension skills)<\/li>\
<\/ul>\
<br\/>";
Ответ 5
Хороший способ конкатенации строк в javascript выполняется:
var stringBuilder = [];
stringBuilder.push("<strong>English Comprehension</strong>");
stringBuilder.push("<br />");
stringBuilder.push("<ul>");
...
var resultString = stringBuilder.join("");
Этот метод быстрее, чем
var str = "a"+"b" +"c"
Ответ 6
Удалите новые строки, это сработает. ГОТХА, чтобы иметь в виду;)
Увидите, что простые работы здесь прекрасны без символов новой строки:
http://jsfiddle.net/87dYh/
var str= "<strong>English Comprehension<\/strong><br\/><ul> <li> Synonyms/Antonyms/Word Meaning (Vocabulary)<\/li> <li> Complete the Sentence (Grammar)<\/li> <li> Spot error/Correct sentence (Grammar/sentence construction)<\/li> <li> Sentence Ordering (Comprehension skills)<\/li> <li> Questions based on passage (Comprehension skills)<\/li> <\/ul> <br\/>";
alert(str);
Ответ 7
Если вы хотите сохранить свои данные в одном блоке строки, попробуйте:
var str= "<strong>English Comprehension</strong>\n\
<br />\n\
<ul>\n\
<li> Synonyms/Antonyms/Word Meaning (Vocabulary)</li>\n\
<li> Complete the Sentence (Grammar)</li>\n\
<li> Spot error/Correct sentence (Grammar/sentence construction)</li>\n\
<li> Sentence Ordering (Comprehension skills)</li>\n\
<li> Questions based on passage (Comprehension skills)</li>\n\
</ul>\n\
<br />";
обратите внимание на \n\
в конце каждой строки.
Ответ 8
Мой код был response.write(), где мне нужно было вставить html для вывода POST SUbmit в форме внутри iframe. При копировании моего кода из текстового редактора возврат carraige переносится в окно кода. Как только я удалил свои возвраты и пробелы между тегами, чтобы код выглядел как абзац блока, который исправил проблему:
("loremIPSUM.<br><br><h2>Title</h2><br>loremIPSUM:<br><br><br><a href='http://url1'>lnk1</a><br><br><a href='http://url2'>loremIPSUMlnk2</a><br><br><a href='http://url3'>loremIPSUM</a><br><br><a href='url4'>IF THE case id is: "</a>"+value)
Ответ 9
JavaScript не разрешает литерные разрывы строк в строках, если вы не избежите их с помощью \
:
var str= "<strong>English Comprehension<\/strong>\
<br\/>\
<ul>\
<li> Synonyms/Antonyms/Word Meaning (Vocabulary)<\/li>\
<li> Complete the Sentence (Grammar)<\/li>\
<li> Spot error/Correct sentence (Grammar/sentence construction)<\/li>\
<li> Sentence Ordering (Comprehension skills)<\/li>\
<li> Questions based on passage (Comprehension skills)<\/li>\
<\/ul>\
<br\/>";
Вместо '
или "
вы можете посмотреть ES2015 + литералы шаблонов, которые используют backticks вместо '
или "
и позволяют выполнять литеральные разрывы строк:
var str= `<strong>English Comprehension<\/strong>
<br\/>
<ul>
<li> Synonyms/Antonyms/Word Meaning (Vocabulary)<\/li>
<li> Complete the Sentence (Grammar)<\/li>
<li> Spot error/Correct sentence (Grammar/sentence construction)<\/li>
<li> Sentence Ordering (Comprehension skills)<\/li>
<li> Questions based on passage (Comprehension skills)<\/li>
<\/ul>
<br\/>`;
Но, конечно, это работает только на ES2015-совместимых машинах JavaScript (или если вы переводите их).
Обратите внимание, что в шаблоне литерал ${...}
имеет особое значение (позволяющее подставить результат любого выражения:
let v = "Ma";
console.log(`Look ${v}, no hands!`); // Look Ma, no hands!