Подтвердить что ты не робот

Непрерывный строковый литерал

Следующий код:

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". В чем проблема?

4b9b3361

Ответ 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!