Почему мой javascript не распознает строки, в которых есть разрывы строк? [Дубликат]

В c ++ вы также можете использовать некоторый тип класса списка, реализованный как массив с методом размера или как структура с членом размера (в c или c ++).

2010
задан Potherca 8 May 2013 в 16:37
поделиться

31 ответ

Обновление:

ECMAScript 6 (ES6) вводит новый тип литерала, а именно шаблонные литералы . Они имеют много особенностей, переменную интерполяцию среди других, но, что наиболее важно для этого вопроса, они могут быть многострочными.

Литература шаблона ограничена ссылками backticks :

var html = `
  <div>
    <span>Some HTML here</span>
  </div>
`;

(Примечание: я не сторонник использования HTML в строках)

Поддержка браузера в порядке , но вы можете использовать transpilers для быть более совместимым.


Оригинальный ответ ES5:

Javascript не имеет синтаксиса здесь. Однако вы можете выйти из буквенной новой строки:

"foo \
bar"
2316
ответ дан Andy Mercer 15 August 2018 в 14:24
поделиться
  • 1
    Будьте осторожны: некоторые браузеры будут вставлять новые строки на продолжении, некоторые не будут. – staticsan 30 April 2009 в 03:22
  • 2
    Visual Studio 2010, похоже, тоже смущает этот синтаксис. – jcollum 17 April 2011 в 22:58
  • 3
    dresende: Это две строки кода. Это одно выражение. – Anonymous 29 March 2012 в 21:02
  • 4
    @Nate Указано в ECMA-262 5th Edition в разделе 7.8.4 и называется LineContinuation : «Символ терминатора линии не может отображаться в строковом литерале, за исключением части a LineContinuation , чтобы создать пустую последовательность символов. Правильный способ заставить символ терминатора линии быть частью значения String строкового литерала - использовать escape-последовательность, такую ​​как\n или \ u000A. & Quot; – some 25 September 2012 в 03:28
  • 5
    – Matt Browne 26 February 2013 в 20:35
  • 6
    Я не понимаю, почему вы это сделаете, когда браузеры будут обрабатывать это непоследовательно. & Quot; line1 \n & Quot; + "строка2" через несколько строк достаточно читабельна, и вам гарантировано последовательное поведение. – SamStephens 20 March 2013 в 22:14

Вы можете сделать это ...

var string = 'This is\n' +
'a multiline\n' + 
'string';
187
ответ дан 5 revs, 2 users 97% 15 August 2018 в 14:24
поделиться

Я думаю, что это обходное решение должно работать в IE, Chrome, Firefox, Safari, Opera -

Использование jQuery:

<xmp id="unique_id" style="display:none;">
  Some plain text
  Both type of quotes :  " ' " And  ' " '
  JS Code : alert("Hello World");
  HTML Code : <div class="some_class"></div>
</xmp>
<script>
   alert($('#unique_id').html());
</script>

Использование Pure Javascript:

<xmp id="unique_id" style="display:none;">
  Some plain text
  Both type of quotes :  " ' " And  ' " '
  JS Code : alert("Hello World");
  HTML Code : <div class="some_class"></div>
</xmp>
<script>
   alert(document.getElementById('unique_id').innerHTML);
</script>

Приветствия !!

1
ответ дан Aditya Hajare 15 August 2018 в 14:24
поделиться
  • 1
    <xmp> настолько устарел. Он может быть разрешен в HTML, но не должен использоваться никакими авторами. См. stackoverflow.com/questions/8307846/… – Bergi 28 January 2013 в 14:28
  • 2
    @Bergi, вы правы .. и с помощью <pre>; с экранами не поможет в моем решении .. Сегодня я столкнулся с подобной проблемой и попытался выяснить обходное решение .. но в моем случае я нашел один очень n00bish способ исправить эта проблема, помещая вывод в html-комментарии вместо & lt; xmp & gt; или любой другой тег. лол. Я знаю, что это не стандартный способ сделать это, но я буду работать над этой проблемой завтра завтра. Привет! – Aditya Hajare 28 January 2013 в 15:11
  • 3
    К сожалению, даже с style="display:none" Chrome пытается загрузить любые изображения <img>, упомянутые в примере блока. – Jesse Glick 9 December 2013 в 21:57

Просто попробовал анонимный ответ и нашел здесь небольшой трюк, он не работает, если после обратного слэша есть пробел \. Так что следующее решение не работает -

var x = { test:'<?xml version="1.0"?>\ <-- One space here
            <?mso-application progid="Excel.Sheet"?>' 
};

Но когда пространство удалено, он работает -

var x = { test:'<?xml version="1.0"?>\<-- No space here now
          <?mso-application progid="Excel.Sheet"?>' 
};

alert(x.test);​

Надеюсь, что это поможет !!

0
ответ дан Anmol Saraf 15 August 2018 в 14:24
поделиться
  • 1
    очевидно, если у вас есть пробел после обратной косой черты, обратная косая черта выходит из пространства. Предполагается, что он должен выйти из строя, а не пространства. – Sejanus 14 December 2012 в 10:47

Если вы работаете только в узле, вы можете использовать модуль fs для чтения в многострочной строке из файла:

var diagram;
var fs = require('fs');
fs.readFile( __dirname + '/diagram.txt', function (err, data) {
  if (err) {
    throw err; 
  }
  diagram = data.toString();
});
0
ответ дан Charles Brandt 15 August 2018 в 14:24
поделиться

Моя версия соединения на основе массива для строки concat:

var c = []; //c stands for content
c.push("<div id='thisDiv' style='left:10px'></div>");
c.push("<div onclick='showDo(\'something\');'></div>");
$(body).append(c.join('\n'));

Это сработало хорошо для меня, тем более, что я часто вставляю значения в html, построенный таким образом. Но у него много ограничений. Отступы были бы приятными. Не иметь дело с вложенными кавычками, было бы очень приятно, и только громоздкость этого меня беспокоила.

Является ли .push () для добавления в массив, занимающий много времени? См. Этот ответ:

( Есть ли причина, по которой разработчики JavaScript не используют Array.push ()? )

После просмотра этих (противоположных ), похоже, что .push () отлично подходит для строковых массивов, которые вряд ли будут расти более чем на 100 элементов - я избегу его в пользу индексированных добавлений для больших массивов.

10
ответ дан Community 15 August 2018 в 14:24
поделиться
  • 1
    Это мой первый фактический комментарий. Я получил привилегию upvote 2 дня назад, так что я сразу же поддержал тот ответ, который я упомянул выше. Спасибо всем, кто поднял мою слабую попытку помочь. – Tyler 24 July 2011 в 13:34
  • 2
    Спасибо всем, кто действительно поддержал этот ответ: у меня теперь достаточно привилегий, чтобы публиковать обычные комментарии! Так что еще раз спасибо. – Tyler 31 August 2012 в 03:41

Обновление:

Как упоминается в первом ответе, с ES6 / Babel вы можете теперь создавать многострочные строки просто с помощью обратных ссылок:

const htmlString = `Say hello to 
multi-line
strings!`;

Интерполирующие переменные являются популярная новая функция, которая поставляется с строками с разделителями обратной ссылки:

const htmlString = `${user.name} liked your post about strings`;

Это просто переходит к конкатенации:

user.name + ' liked your post about strings'

Оригинальный ответ ES5:

Руководство по стилю JavaScript в стиле Google рекомендует использовать конкатенацию строк вместо экранирования строк:

Не делайте этого:

var myString = 'A rather long string of English text, an error message \
                actually that just keeps going and going -- an error \
                message to make the Energizer bunny blush (right through \
                those Schwarzenegger shades)! Where was I? Oh yes, \
                you\'ve got an error and all the extraneous whitespace is \
                just gravy.  Have a nice day.';

Пробелы на начало каждой строки не может быть безопасно удалено во время компиляции; пробел после косой черты приведет к сложным ошибкам; и в то время как большинство движков сценариев поддерживают это, оно не является частью ECMAScript.

Вместо этого используйте конкатенацию строк:

var myString = 'A rather long string of English text, an error message ' +
               'actually that just keeps going and going -- an error ' +
               'message to make the Energizer bunny blush (right through ' +
               'those Schwarzenegger shades)! Where was I? Oh yes, ' +
               'you\'ve got an error and all the extraneous whitespace is ' +
               'just gravy.  Have a nice day.';
1121
ответ дан Devin G Rhode 15 August 2018 в 14:24
поделиться
  • 1
    это не работает для меня в канареечном хроме для окон даже после включения экспериментального JavaScript – Inuart 20 November 2012 в 03:09
  • 2
    Я не понимаю рекомендации Google. Все браузеры, кроме чрезвычайно старых, поддерживают обратную косую черту, сопровождаемую подходом новой строки, и будут продолжать делать это в будущем для обратной совместимости. Единственный раз, когда вам нужно его избежать, нужно убедиться, что в конце каждой строки добавлена ​​одна или только новая строка (или новая строка) (см. Также мой комментарий к принятому ответу). – Matt Browne 26 February 2013 в 20:40
  • 3
    Обратите внимание, что строки шаблонов не поддерживаются в IE11, Firefox 31, Chrome 35 или Safari 7. См. kangax.github.io/compat-table/es6 – Dwayne 24 May 2014 в 03:41
  • 4
    @MattBrowne Рекомендация Google уже документирована ими в порядке важности причин: (1) Пробел в начале каждой строки [в примере вы не хотите, чтобы это пробелы в вашей строке, но оно выглядело лучше в коде ] (2) пробел после косой черты приведет к сложным ошибкам [если вы закончите строку с \ вместо `\` это трудно заметить] и (3), в то время как большинство движков сценариев поддерживают это, это не часть ECMAScript [т.е. зачем использовать нестандартные функции?] Помните, что это руководство по стилю, которое позволяет легко читать код + поддерживать + отлаживать: не просто «работает» & quot; верный. – ShreevatsaR 31 July 2016 в 20:29
  • 5
    удивительно, что после всех этих лет конкатенация строк по-прежнему является лучшим / самым безопасным / наиболее подходящим способом. шаблонные литералы (выше ответа) не работают в IE, а экранирование - это просто беспорядок, о котором вы скоро пожалеете – Tiago Duarte 11 November 2016 в 13:31

ES6 позволяет использовать обратную линию для указания строки на нескольких строках. Это называется листом шаблона. Пример:

var multilineString = `One line of text
    second line of text
    third line of text
    fourth line of text`;

Использование backtick работает в NodeJS и поддерживается Chrome, Firefox, Edge, Safari и Opera.

https: // разработчик .mozilla.org / EN-US / Docs / Web / JavaScript / Справка / Template_literals

5
ответ дан earl3s 15 August 2018 в 14:24
поделиться

Способ ES6 для этого был бы с использованием литералов шаблона

const str = `${This 


is 


a


multiline text}` ; 

console.log(str);
0
ответ дан eyllanesc 15 August 2018 в 14:24
поделиться

Использование тегов скриптов:

  • добавить блок <script>...</script>, содержащий ваш многострочный текст в тег head;
  • получить ваш многострочный текст как есть ... ( следить за кодировкой текста: UTF-8, ASCII)
    <script>
    
        // pure javascript
        var text = document.getElementById("mySoapMessage").innerHTML ;
    
        // using JQuery's document ready for safety
        $(document).ready(function() {
    
            var text = $("#mySoapMessage").html(); 
    
        });
    
    </script>
    
    <script id="mySoapMessage" type="text/plain">
    
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="...">
           <soapenv:Header/>
           <soapenv:Body>
              <typ:getConvocadosElement>
                 ...
              </typ:getConvocadosElement>
           </soapenv:Body>
        </soapenv:Envelope>
    
        <!-- this comment will be present on your string -->
        //uh-oh, javascript comments...  SOAP request will fail 
    
    
    </script>
    
27
ответ дан jpfreire 15 August 2018 в 14:24
поделиться
  • 1
    Я думаю, что эта стратегия чиста и amp; далеко недоиспользованный. jsrender использует это. – xdhmoore 9 January 2015 в 16:57
  • 2
    Я использую это с innerText iso innerHTML, но как я могу убедиться, что пробелы сохранены? – David Nouls 16 July 2015 в 08:53
  • 3
    Поскольку мыло основано в XML, оно должно сохранять <![CDATA[.....]]>. – jpfreire 28 October 2015 в 06:30
  • 4
    Также ajax-запросы, если вы их используете. Вы можете попытаться изменить заголовки xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");. Я не помню, чтобы возникали другие проблемы, кроме комментариев в JS. Пространства, где нет проблем. – jpfreire 28 October 2015 в 06:40

Эквивалент в javascript:

var text = `
This
Is
A
Multiline
String
`;

Вот спецификация . См. Поддержку браузера внизу этой страницы . Вот некоторые примеры .

7
ответ дан Lonnie Best 15 August 2018 в 14:24
поделиться

Я придумал этот очень сложный метод многострочной строки. Поскольку преобразование функции в строку также возвращает любые комментарии внутри функции, вы можете использовать комментарии в качестве своей строки, используя многострочный комментарий / ** /. Вам просто нужно обрезать концы, и у вас есть строка.

var myString = function(){/*
    This is some
    awesome multi-lined
    string using a comment 
    inside a function 
    returned as a string.
    Enjoy the jimmy rigged code.
*/}.toString().slice(14,-3)

alert(myString)
107
ответ дан Luke 15 August 2018 в 14:24
поделиться
  • 1
    Это ужасно. Мне это нравится (хотя вам может понадобиться выполнить регулярное выражение, потому что я не уверен, насколько точны пробелы для toString(). – Kevin Cox 7 April 2013 в 22:53
  • 2
  • 3
    Это решение, похоже, не работает в firefox, возможно, это функция безопасности для браузера? EDIT: Nevermind, он работает только с Firefox версии 16. – Bill 6 June 2013 в 20:18
  • 4
    Также будьте осторожны с минитракторами, которые снимают комментарии ...: D – jondavidjohn 22 October 2013 в 20:07
  • 5
    @KevinCox вы можете использовать trim(). – schmijos 17 October 2014 в 15:42
  • 6
    – Danilo M. Oliveira 15 October 2018 в 18:39

Эта библиотека делает ее красивой:

https://github.com/sindresorhus/multiline

До

var str = '' +
'<!doctype html>' +
'<html>' +
'   <body>' +
'       <h1>❤ unicorns</h1>' +
'   </body>' +
'</html>' +
'';

После

var str = multiline(function(){/*
<!doctype html>
<html>
    <body>
        <h1>❤ unicorns</h1>
    </body>
</html>
*/});
17
ответ дан mightyiam 15 August 2018 в 14:24
поделиться
  • 1
    Эта поддержка в nodejs, используемая в браузере, должна быть актуальной. – Huei Tan 5 May 2014 в 09:52
  • 2
    @HueiTan Docs заявляет, что он также работает в браузере. Что имеет смысл - это просто Function.prototype.String(). – mikemaccana 13 July 2014 в 20:14
  • 3
    ya, но он сказал: «Пока он работает нормально в браузере, он в основном предназначен для использования в Node.js. Используйте на свой страх и риск. В то время как в браузере он отлично работает, он в основном предназначен для использования в Node.js. Используйте на свой страх и риск. (Просто спасибо XD) – Huei Tan 14 July 2014 в 10:37
  • 4
    @HueiTanYep Я прочитал эту часть. Но Function.prototype.toString () довольно стабильна и хорошо известна. – mikemaccana 14 July 2014 в 11:52
  • 5
    Лучший ответ для меня, потому что он по крайней мере достигает многострочного без всякого мусора посередине (мусор в начале и в конце концов я могу иметь дело). – Damien Golding 27 August 2014 в 07:25

Обновлено до 2015 года: сейчас прошло шесть лет: большинство людей используют загрузчик модулей, а в основных модульных системах есть способы загрузки шаблонов. Это не встроенный, но наиболее распространенным типом многострочной строки являются шаблоны, и в любом случае шаблоны вообще не должны содержать JS.

require.js: «требуется текст».

Использование require.js 'text' plugin , с многострочным шаблоном в template.html

var template = require('text!template.html')

NPM / браузер: модуль 'brfs'

Browserify использует модуль «brfs» для загрузки текстовых файлов. Это фактически построит ваш шаблон в вашем комплекте HTML.

var fs = require("fs");
var template = fs.readFileSync(template.html', 'utf8');

Легко.

8
ответ дан mikemaccana 15 August 2018 в 14:24
поделиться

Downvoters: этот код предоставляется только для информации.

Это было протестировано в Fx 19 и Chrome 24 на Mac

DEMO

var new_comment; /*<<<EOF 
    <li class="photobooth-comment">
       <span class="username">
          <a href="#">You</a>
       </span>
       <span class="comment-text">
          $text
       </span>
       <span class="comment-time">
          2d
       </span>
    </li>
EOF*/
// note the script tag here is hardcoded as the FIRST tag 
new_comment=document.currentScript.innerHTML.split("EOF")[1]; 
alert(new_comment.replace('$text','Here goes some text'));
13
ответ дан mplungjan 15 August 2018 в 14:24
поделиться
  • 1
    Это ужасно. +1. И вы можете использовать document.currentScript вместо getElement ... – Orwellophile 27 May 2015 в 10:00
  • 2
    Undefined & quot; you & quot; в хром для osx – mplungjan 27 May 2015 в 16:46
  • 3
    jsfiddle-fixed - У меня, должно быть, был & quot; вы & quot; определенную глобально в моей консоли. Работает сейчас (chrome / osx). Хорошая вещь о добавлении комментария к var заключается в том, что вы не находитесь в контексте функции, jsfiddle-function-heredoc , хотя функция функции будет классной для методов класса. может быть лучше передать ему объект {this: that} в любом случае. забава подтолкнуть что-то сумасшедшее до предела в любом случае :) – Orwellophile 1 June 2015 в 16:44
  • 4
    Забудь ненавистников. Это единственная верная панель ответов ES6. Все остальные ответы требуют конкатенации, вычисления какого-то рода или ускорения. Это на самом деле довольно круто, и я собираюсь использовать его как способ добавить документацию в игру, над которой я работаю как хобби. Пока этот трюк не используется для чего-либо, что могло бы вызвать ошибку (я вижу, как кто-то пойдет). Semicolon, derp. Давайте поместим комментарий в следующую строку. & Quot ;, а затем он сломает ваш код.) , это действительно большое дело в моей хобби? Нет, и я могу использовать крутой трюк для чего-то полезного. Отличный ответ. – Thomas Dignan 27 July 2015 в 21:10
  • 5
    Я никогда не был достаточно храбр, чтобы использовать эту технику в производственном коде, но там, где я ее использую, много в модульном тестировании, где часто проще сбросить значение некоторой структуры в виде (довольно длинной) строки и сравнить ее с что это должно быть. – Ben McIntyre 3 February 2016 в 01:00

Вы можете использовать += для объединения вашей строки, кажется, никто не ответил на это, что будет читаемым, а также аккуратным ... что-то вроде этого

var hello = 'hello' +
            'world' +
            'blah';

также может быть записано как

var hello = 'hello';
    hello += ' world';
    hello += ' blah';

console.log(hello);
3
ответ дан Mr. Alien 15 August 2018 в 14:24
поделиться

шаблон text = <<"HERE" This Is A Multiline String HERE недоступен в js (я помню, как много использовал его в своих добрых старых днях Perl).

Чтобы контролировать работу сложных или длинных многострочных строк, я иногда использую шаблон массива:

var myString = 
   ['<div id="someId">',
    'some content<br />',
    '<a href="#someRef">someRefTxt</a>',
    '</div>'
   ].join('\n');

или анонимный шаблон уже показал (escape newline), который может быть уродливым блоком в вашем коде:

    var myString = 
       '<div id="someId"> \
some content<br /> \
<a href="#someRef">someRefTxt</a> \
</div>';

Вот еще один странный, но работающий «трюк» 1 :

var myString = (function () {/*
   <div id="someId">
     some content<br />
     <a href="#someRef">someRefTxt</a>
    </div>        
*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];

внешнее редактирование: jsfiddle

[ дополнение 2015 ] ES6 поддерживает привязку строк к нескольким строкам с использованием строк шаблона :

let str = `This is a text
    with multiple lines.
    Escapes are interpreted,
    \n is a newline.`;
let str = String.raw`This is a text
    with multiple lines.
    Escapes are not interpreted,
    \n is not a newline.`;

1 Примечание: это будет потеряно после минификсации / обфускации ваш код

634
ответ дан Orwellophile 15 August 2018 в 14:24
поделиться
  • 1
    Не используйте шаблон массива. В большинстве случаев он будет медленнее, чем обычная конкатенация строк. – BMiner 17 July 2011 в 13:39
  • 2
    В самом деле? jsperf.com/join-concat/24 – KooiInc 17 July 2011 в 14:21
  • 3
    Шаблон массива более читабельен, а потеря производительности для приложения часто незначительна. Как показывает этот перфекционный тест, даже IE7 может выполнять десятки тысяч операций в секунду. – Ben Atkin 20 August 2011 в 09:16
  • 4
    +1 для элегантной альтернативы, которая не только работает одинаково во всех браузерах, но также надежна для будущего. – Pavel 21 May 2012 в 07:06
  • 5
    @KooiInc. Тестирование начинается с уже созданного массива, который искажает результаты. Если вы добавляете инициализацию массива, прямая конкатенация выполняется быстрее jsperf.com/string-concat-without-sringbuilder/7 См. stackoverflow.com/questions/51185/… Как трюк для новых строк, это может быть хорошо, но это определенно делает больше работы, чем нужно – Juan Mendes 4 August 2013 в 09:02

Я удивлен, что не видел этого, потому что он работает везде, где я его тестировал, и очень полезен, например. templates:

<script type="bogus" id="multi">
    My
    multiline
    string
</script>
<script>
    alert($('#multi').html());
</script>

Знает ли кто-нибудь об окружающей среде, где есть HTML, но это не работает?

82
ответ дан Peter V. Mørch 15 August 2018 в 14:24
поделиться
  • 1
    В любом месте, где вы не хотите помещать свои строки в отдельные и удаленные элементы сценария. – Lodewijk 9 January 2012 в 03:12
  • 2
    Действительное возражение! Это не идеально. Но для шаблонов это разделение не только хорошо, но, возможно, даже поощряется. – Peter V. Mørch 3 February 2012 в 11:03
  • 3
    Я предпочитаю разбивать все более 80/120 символов на многострочные, я боюсь, что это больше, чем просто шаблоны. Я предпочитаю синтаксис 'line1' + 'line2'. Это также самый быстрый (хотя это может конкурировать с ним за действительно большие тексты). Это хороший трюк. – Lodewijk 4 February 2012 в 00:51
  • 4
    на самом деле, это HTML не Javascript: - / – CpILL 22 May 2012 в 09:54
  • 5
    однако задача получения многострочной строки в javascript может быть выполнена таким образом – Davi Fiamenghi 30 July 2013 в 22:41

Пожалуйста, любите использование конкатенации использования Интернета и не используйте для этого решения ES6. ES6 НЕ поддерживается по всем направлениям, подобно CSS3, и некоторые браузеры медленно адаптируются к движению CSS3. Используйте plain ol 'JavaScript, ваши конечные пользователи будут вам благодарны.

Пример:

var str = "This world is neither flat nor round. "+ "Once was lost will be found";

3
ответ дан Pragmatiq 15 August 2018 в 14:24
поделиться
  • 1
    в то время как я согласен с вашей точкой, я бы не назвал javascript & quot; good & quot; ола – user151496 5 March 2018 в 01:18

Также обратите внимание, что при расширении строки по нескольким строкам, используя обратную косую черту в конце каждой строки, любые дополнительные символы (в основном пробелы, вкладки и комментарии, добавленные по ошибке) после обратной косой черты вызовут неожиданную ошибку символа, час, чтобы узнать

var string = "line1\  // comment, space or tabs here raise error
line2";
3
ответ дан Prakash GPz 15 August 2018 в 14:24
поделиться

Мне нравится этот синтаксис и отступ:

string = 'my long string...\n'
       + 'continue here\n'
       + 'and here.';

(но на самом деле нельзя рассматривать как многострочную строку)

24
ответ дан semente 15 August 2018 в 14:24
поделиться
  • 1
    Я использую это, за исключением того, что я положил '+' в конце предыдущей строки, чтобы было ясно, что оператор продолжается на следующей строке. Ваш путь выравнивает отступы более равномерно, хотя. – Sean 4 October 2012 в 09:54
  • 2
    @Sean я тоже это использую, и я по-прежнему предпочитаю добавлять «+» в начале каждой новой строки, а final «;» на новой строке, потому что я нашел ее более «правильной». – AgelessEssence 14 November 2013 в 07:06
  • 3
    поместив + в начало, можно прокомментировать эту строку без необходимости редактировать другие строки, когда она находится в первой / последней строке последовательности. – moliad 12 December 2013 в 17:38
  • 4
    Я предпочитаю + спереди, так как визуально мне не нужно сканировать до конца строки, чтобы знать, что следующий - продолжение. – Daniel Sokolowski 7 May 2014 в 16:40

Если вы хотите использовать экранированные строки новой строки, их можно использовать красиво . Он выглядит как документ со страничной границей.

enter image description here [/g1]

8
ответ дан seo 15 August 2018 в 14:24
поделиться
  • 1
    Разве это не добавит лишних пробелов? – tomByrer 6 December 2015 в 13:29
  • 2
    @tomByrer Да, хорошее наблюдение. Это полезно только для строк, которые вам не нужны, например, в пробеле. HTML. – seo 7 December 2015 в 00:02

Вы должны использовать оператор конкатенации «+».

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <p id="demo"></p>
    <script>
        var str = "This "
                + "\n<br>is "
                + "\n<br>multiline "
                + "\n<br>string.";
        document.getElementById("demo").innerHTML = str;
     </script>
</body>
</html>

Используя \n, ваш исходный код будет выглядеть так:

This 
 <br>is
 <br>multiline
 <br>string.

Используя <br> ваш вывод будет выглядеть так:

This
is
multiline
string.
2
ответ дан Sonevol 15 August 2018 в 14:24
поделиться

Вы можете использовать TypeScript (JavaScript SuperSet), он поддерживает многострочные строки и переводит обратно на чистый JavaScript без накладных расходов:

var templates = {
    myString: `this is
a multiline
string` 
}

alert(templates.myString);

Если вы хотите выполните это с помощью обычного JavaScript:

var templates = 
{
 myString: function(){/*
    This is some
    awesome multi-lined
    string using a comment 
    inside a function 
    returned as a string.
    Enjoy the jimmy rigged code.
*/}.toString().slice(14,-3)

}
alert(templates.myString)

Обратите внимание, что iPad / Safari не поддерживает 'functionName.toString()'

Если у вас много устаревшего кода, вы также можете использовать простой вариант JavaScript в TypeScript (для целей очистки):

interface externTemplates
{
    myString:string;
}

declare var templates:externTemplates;

alert(templates.myString)

, и вы можете использовать объект многострочной строки из простого варианта JavaScript, где вы помещаете шаблоны в другой файл (который вы можете объединить в пучок).

Вы можете попробовать TypeScript в http://www.typescriptlang.org/Playground

7
ответ дан Stefan Steiger 15 August 2018 в 14:24
поделиться

Это работает в IE, Safari, Chrome и Firefox:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<div class="crazy_idea" thorn_in_my_side='<table  border="0">
                        <tr>
                            <td ><span class="mlayouttablecellsdynamic">PACKAGE price $65.00</span></td>
                        </tr>
                    </table>'></div>
<script type="text/javascript">
    alert($(".crazy_idea").attr("thorn_in_my_side"));
</script>
7
ответ дан stillatmycomputer 15 August 2018 в 14:24
поделиться
  • 1
    Просто подумай об этом. Как вы думаете, это действительно так? Разве вы не думаете, что это может вызвать проблемы с отображением? – Sk8erPeter 24 February 2012 в 03:55
  • 2
    Почему вниз вниз? Это творческий ответ, если не очень практичный! – dotancohen 29 February 2012 в 04:32
  • 3
    нет, это не так. Нужно использовать шаблоны: $ .tmpl () ( api.jquery.com/tmpl ) или EJS ( embeddedjs.com/getting_started.html ) и т. Д. Один причина для downvotes заключается в том, что это действительно далекий от действительного кода, и использование этого может вызвать огромные проблемы с отображением. – Sk8erPeter 24 March 2012 в 02:07
  • 4
    Я надеюсь, что никто никогда не использует этот ответ на практике, но это аккуратная идея – DCShannon 14 March 2015 в 00:48

Существует несколько способов достижения этого

1. Конкатенация слэш

  var MultiLine=  '1\
    2\
    3\
    4\
    5\
    6\
    7\
    8\
    9';

2. регулярная конкатенация

var MultiLine = '1'
+'2'
+'3'
+'4'
+'5';

3. Array Присоединиться к конкатенации

var MultiLine = [
'1',
'2',
'3',
'4',
'5'
].join('');

Производительность, кратность конкатенации (первая) является самой быстрой.

См. этот тестовый пример для получения более подробной информации о производительности

Обновление:

С ES2015 мы можем воспользоваться функцией Template strings. С его помощью нам просто нужно использовать обратные тики для создания многострочных строк

Пример:

 `<h1>{{title}}</h1>
  <h2>{{hero.name}} details!</h2>
  <div><label>id: </label>{{hero.id}}</div>
  <div><label>name: </label>{{hero.name}}</div>
  `
25
ответ дан Vignesh Subramanian 15 August 2018 в 14:24
поделиться
  • 1
    Я думаю, что вы только что срывали то, что уже было на странице в течение пяти лет, но более чистым способом. – RandomInsano 2 August 2014 в 19:22
  • 2
    не будет сокращать конкатенацию, также включают пробелы в начале строк? – f.khantsis 9 May 2017 в 23:39

Вы можете иметь многострочные строки в чистом JavaScript.

Этот метод основан на сериализации функций, которые определены как зависящие от реализации . Он работает в большинстве браузеров (см. Ниже), но нет гарантии, что он все равно будет работать в будущем, поэтому не полагайтесь на него.

Используя следующую функцию:

function hereDoc(f) {
  return f.toString().
      replace(/^[^\/]+\/\*!?/, '').
      replace(/\*\/[^\/]+$/, '');
}

У вас могут быть следующие документы:

var tennysonQuote = hereDoc(function() {/*!
  Theirs not to make reply,
  Theirs not to reason why,
  Theirs but to do and die
*/});

Метод успешно протестирован в следующих браузерах (не упоминается = не проверен):

  • IE 4 - 10
  • Opera 9.50 - 12 (не в 9 -)
  • Safari 4 - 6 (не в 3 -)
  • Chrome 1 - 45
  • Firefox 17 - 21 ( не в 16 - )
  • Rekonq 0.7.0 - 0.8.0
  • Not поддерживается в Konqueror 4.7.4

Будьте осторожны с вашим мини-усилителем. Он имеет тенденцию удалять комментарии. Для компрессора YUI будет сохранен комментарий, начинающийся с /*! (например, тот, который я использовал).

Я думаю, что решение real было бы использовать CoffeeScript .

327
ответ дан Web_Designer 15 August 2018 в 14:24
поделиться
  • 1
    + 1 + 1 Умный! (работает в Node.JS) – George Bailey 4 June 2011 в 22:57
  • 2
    Какие!? создание и декомпиляция функции для взлома многострочного комментария как многострочной строки? Теперь это уродливое. – fforw 17 June 2011 в 16:49
  • 3
    Это на самом деле за пределами уродливое ... Хотя, не существует декомпиляции ... – Jordão 17 June 2011 в 19:39
  • 4
    jsfiddle.net/fqpwf работает в Chrome 13 и IE8 / 9, но не в FF6. Мне не нравится это говорить, но мне это нравится, и если это может быть преднамеренной особенностью каждого браузера (чтобы он не исчез), я бы использовал его. – Jason Kleban 9 September 2011 в 22:36
  • 5
    Очень удобно. Я использую его для модульных тестов (Jasmine), но избегаю этого для производственного кода. – Jason 13 July 2012 в 06:23

Я решил это, выведя div, сделав его скрытым и вызвав div id jQuery, когда мне это нужно.

например

<div id="UniqueID" style="display:none;">
     Strings
     On
     Multiple
     Lines
     Here
</div>

Тогда, когда мне нужно получить строку, я просто использую следующий jQuery:

$('#UniqueID').html();

Который возвращает мой текст на нескольких строках. Если я назову

alert($('#UniqueID').html());

, я получаю:

enter image description here [/g0]

46
ответ дан XXN 15 August 2018 в 14:24
поделиться
  • 1
    Спасибо за это! Это единственный ответ, который я нашел, который решает мою проблему, которая включает неизвестные строки, которые могут содержать любую комбинацию одиночных и двойных кавычек, которые непосредственно вставляются в код без возможности предварительного кодирования. (он исходит из языка шаблонов, который создает JS - все еще из надежного источника, а не для представления формы, поэтому он НЕ СУЩЕСТВЕННО сумасшедший). – octern 23 June 2013 в 18:19
  • 2
    Это был единственный метод, который фактически работал для меня, чтобы создать многострочную строковую строку javascript из Java String. – beginner_ 6 August 2013 в 13:06
  • 3
    Что, если строка является HTML? – Dan Dascalescu 24 January 2014 в 10:39
  • 4
    $ ( '# UniqueID'). Содержание () – mplungjan 24 January 2014 в 11:28
  • 5
    @Pacerier Все, что я прочитал, как из Google, так и из других сайтов, говорит, что в настоящее время Google индексирует контент display:none, скорее всего, из-за популярности интерфейсов в стиле JavaScript. (Например, страница часто задаваемых вопросов со скрытой / демонстрационной функциональностью.) Однако вам нужно быть осторожным, потому что Google говорит, что они могут наказать вас, если скрытый контент, по-видимому, предназначен для искусственного раздувания ваших рангов SEO. – Gavin 8 August 2017 в 13:12

Мое расширение до https://stackoverflow.com/a/15558082/80404 . Он ожидает комментарий в форме /*! any multiline comment */, где символ! используется для предотвращения удаления путем минификации (по крайней мере для компрессора YUI)

Function.prototype.extractComment = function() {
    var startComment = "/*!";
    var endComment = "*/";
    var str = this.toString();

    var start = str.indexOf(startComment);
    var end = str.lastIndexOf(endComment);

    return str.slice(start + startComment.length, -(str.length - end));
};

Пример:

var tmpl = function() { /*!
 <div class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
    </ul>
 </div>
*/}.extractComment();
10
ответ дан Community 15 August 2018 в 14:24
поделиться
  • 1
    Это мой первый фактический комментарий. Я получил привилегию upvote 2 дня назад, так что я сразу же поддержал тот ответ, который я упомянул выше. Спасибо всем, кто поднял мою слабую попытку помочь. – Tyler 24 July 2011 в 13:34
  • 2
    Спасибо всем, кто действительно поддержал этот ответ: у меня теперь достаточно привилегий, чтобы публиковать обычные комментарии! Так что еще раз спасибо. – Tyler 31 August 2012 в 03:41
10
ответ дан Community 5 September 2018 в 13:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: