JavaScript-də çox satırlar yaratmaq

Yaqutda aşağıdakı kod var. Bu kodu javascriptə çevirmək istəyirəm. Js-da ekvivalent kod nədir?

 text = <<"HERE" This Is A Multiline String HERE 
1981
30 апр. 30 Mart tarixində Newy tərəfindən təyin olundu 2009-04-30 05:11 '09 da 5:11 'də 2009-04-30 05:11' də
@ 36 cavab
  • 1
  • 2

Yeniləmə:

ECMAScript 6 (ES6) yeni bir literal, yəni şablon yazıları təqdim edir. Onların bir çox funksiyaları, başqaları arasında dəyişən interpolasiya var, amma ən əsası bu sual üçün çox line ola bilərlər.

Şablon ədəbiyyatı ters addımlarla məhdudlaşır:

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

(Qeyd: Mən strinqdə HTML istifadə etmə xeyrinə deyiləm)

Brauzer dəstəyi gözəldir , lakin daha çox uyğunluq üçün transpilers istifadə edə bilərsiniz.


ES5 orijinal cavab:

Javascript bu sənədin heç bir sintaksisinə malik deyildir. Ancaq yeni məktubdan uzaqlaşa bilərsiniz:

 "foo \ bar" 
2401
30 апр. Cavab Anonim 30 apr tərəfindən verilir . 2009-04-30 05:15 '09 saat 05:15 'da 2009-04-30 05:15

ES6 yeniləmə:

İlk cavabda qeyd edildiyi kimi, ES6 / Babel ilə artıq geri əlaqələri istifadə edərək, çox satırlı simlər yarada bilərsiniz:

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

Interpolating dəyişənlər məhdud tipli strings ilə gəlir məşhur bir yeni xüsusiyyətdir:

 const htmlString = '${user.name} liked your post about strings'; 
border=0

Yalnız birləşməyə gəlir:

 user.name + ' liked your post about strings' 

ES5 orijinal cavab:

JavaScript-dəki JavaScript-dəki bələdçi qatarlardan qaçmaq əvəzinə magistral birləşmələri istifadə etməyi tövsiyə edir:

Bunu etməyin:

 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.'; 

Hər bir xəttin başlanğıcında yer kompilyasiya vaxtında təhlükəsiz şəkildə çıxarıla bilməz; Çatlardan sonra bir yer mürəkkəb səhvlərə səbəb olacaq; və ən skript yazıçıları bunu dəstəkləyirsə, ECMAScript bir hissəsidir.

Bunun əvəzinə magistral birləşməsini istifadə edin:

 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.'; 
1138
06 июня '11 в 5:30 2011-06-06 05:30 Cavab Devin G Rhode tərəfindən 06.06.2011 tarixində saat 05.30-da verilir

şablon text = <<"HERE" This Is A Multiline String HERE çoxsaylı bir text = <<"HERE" This Is A Multiline String HERE js mövcud deyil (Perl-in yaxşı köhnə günlərində nə qədər istifadə etdiyimi xatırlayıram).

Mürəkkəb və ya uzun çox satırlı strinqlər izləmək üçün bəzən bir sıra nümunəsini istifadə edirəm:

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

kodunuzda çirkin bir blok ola biləcək zaten gösterilen anonim bir şablon (escape newline):

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

İşdə başqa bir qəribə, amma işləyən "hiylə" 1 :

 var myString = (function () {}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1]; 

xarici redaktə: jsfiddle

ES20xx , simli nümunələri istifadə edərək , strings birdən çox simgəyə bağlanmasını dəstəkləyir:

 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 Qeyd: Bu qarışıq / obfuscation kodundan sonra itəcək

637
30 апр. Cavab KooiInc Apr 30 verilir 2009-04-30 10:22 '09 at 10:22 AM 2009-04-30 10:22

Siz saf javascriptdə çox satırlı simli ola bilərsiniz.

Bu üsul, tətbiqin asılı olduğu kimi təyin olunan funksiyaların seriyalaşdırılmasına əsaslanır. Çox brauzerlərdə işləyir (aşağıya baxın), amma gələcəkdə hələ də işləyəcək bir zəmanət yoxdur, ona etibar etməyin.

Aşağıdakı funksiyanı istifadə edin:

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

Aşağıdakı sənədlərə sahib ola bilərsiniz:

 var tennysonQuote = hereDoc(function() {}); 

Metod aşağıdakı brauzerlərdə uğurla sınaqdan keçirilmişdir (qeyd edilməmişdir = test edilməmişdir):

  • IE 4 - 10
  • Opera 9.50 - 12 (9 - 9)
  • Safari 4 - 6 (deyil 3 -)
  • Chrome 1 - 45
  • Firefox 17 - 21 ( 16 - )
  • Rekonq 0.7.0 - 0.8.0
  • Konqueror 4.7.4-də dəstəklənmir

Minifier ilə diqqətli olun. Şərhləri silmək məcburiyyətindədir. Kompressor üçün YUI }.toString().slice(14,-3) alert(myString)

107
22 марта '13 в 0:05 2013-03-22 00:05 cavab 22 mart 2013-cü ildə 0:05 2013-03-22 00:05 tarixində Luke tərəfindən verilmişdir

Mən bunu görmədiyimə görə təəccübləndim, çünki test etdiyim yerdə çalışır və məsələn, çox faydalıdır. şablonları:

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

Hər kəs HTML var olduğu mühit haqqında bilirmi, amma işə yaramır?

82
03 янв. Peter V. Mørch tərəfindən cavab 03 Jan 2012-01-03 22:51 '12 at 10:51 pm 2012-01-03 22:51

Bunu qərara aldım, gizlədilər və lazım olduğunda jQuery div id çağırdılar.

məsələn.

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

Sonra bir string almaq lazımdır, mən yalnız aşağıdakı jQuery istifadə:

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

Mətnimi bir neçə xətdə qaytarır. Zəng etsəm

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

Mən alıram:

2019

46
17 авг. Tom Beech'e 17 Avqust cavab verin 2012-08-17 17:25 '12 at 5:25 pm 2012-08-17 17:25

Script yazıları istifadə:

  • multiline mətninizi ehtiva edən <script>...</script> blokunu head etiketinə əlavə edin;
  • multiline mətnin olduğu kimi olsun ... (mətn kodunu qeyd edin: UTF-8, ASCII)

     <script> // pure javascript var text = document.getElementById("mySoapMessage").innerHTML ; // using JQuery 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
23 авг. jpfreire 23 avqust cavab verdi . 2012-08-23 21:30 '12 saat 21:30 'da 2012-08-23 21:30

Buna nail olmaq üçün bir neçə yol vardır.

1. Birləşmə çökdürmək

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

2. müntəzəm birləşmə

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

3. Array Birləşməyə qoşulun

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

Performans, Birləşmə Slash (ilk) - ən sürətli.

Performans haqqında ətraflı məlumat üçün bu test vəziyyətinə baxın .

Yeniləmə:

ES2015 ilə Şablon strings xüsusiyyətini istifadə edə bilərik. Bunu edərkən, çox satırlı simli yaratmaq üçün yalnız əks gənci istifadə etməmiz lazımdır.

Məsələn:

  `<h1>{{title}}</h1> <h2>{{hero.name}} details!</h2> <div><label>id: </label>{{hero.id}}</div> <div><label>name: </label>{{hero.name}}</div> ` 
26
26 мая '14 в 12:34 2014-05-26 12:34 cavab Vignesh Subramanian tərəfindən 26 May 'da 12:34' də veriləcək 2014-05-26 12:34

Bu sözdizim və altyazıları sevirəm:

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

(ancaq həqiqətən çox satırlı bir simli kimi qəbul edə bilməzsiniz)

24
13 дек. cavab 13 dekabr cemente verilir . 2011-12-13 23:09 '11 at 23:09 2011-12-13 23:09

Burada gözəlləşdirən kitabxana:

https://github.com/sindresorhus/multiline

Əvvəllər

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

Sonra

 var str = multiline(function(){}); 
17
25 апр. cavab mayyiam Apr 25 verildi 2014-04-25 14:34 '14 14:34 2014-04-25 14:34

Downvoters . Bu kod yalnız məlumat üçün verilir.

Fx 19 və Mac 24-də sınaqdan keçirilmişdir.

Demo

 var new_comment;  // 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
17 февр. 17 fevralda mplungjan cavabını verdi. 2013-02-17 12:56 '13 at 12:56 2013-02-17 12:56

Yekunlaşdırmaq üçün mən istifadəçi javascript proqramlaşdırma (Opera 11.01) burada listelenen 2 yanaşma cəhd:

Buna görə də, JS Opera istifadəçiləri üçün istifadəçi bir yanaşma təklif edirəm. Müəllifin dediklərindən fərqli olaraq:

Firefox və ya operada işləmir; yalnız IE, xrom və safari.

Bu, Opera 11-də işləyir. Ən azı JS istifadəçi skriptlərində. Təəssüf ki, fərdi suallara cavab verə bilməyəcəyəm və onlara cavab verə bilmərəm, dərhal bunu edərdim. Mümkünsə, üstün imtiyazlara sahib bir kəs, mənim üçün bunu edin.

10
20 мая '11 в 16:10 2011-05-20 16:10 cavab 20 may 2011-ci il saat 16:10 'da Tyler tərəfindən verilir. 2011-05-20 16:10

2015-ci ilə qədər yeniləndi : altı il sonra: çoxu bir modul yükləyici istifadə edir və bütün əsas modul sistemlərinin şablonları yükləmək yolları var. Bu yerleşik deyil, ancaq çox satırlı simli ən ümumi növü şablondur və şablonlar, bir qayda olaraq, JS xaricində saxlanılmalıdır .

require.js: "mətn tələb olunur".

Require.js "text" plugin istifadə edərək, template.html-də bir çox satır şablonu ilə

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

NPM / Brauzer: modul 'brfs'

Browserify mətn fayllarını yükləmək üçün "brfs" modulunu istifadə edir . Bu, həqiqətən, HTML paketinizdə şablon yaradır.

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

Asan

8
10 февр. 10 fevralda mikemaccana tərəfindən verilmiş cavab. 2014-02-10 14:13 '14 14:13 2014-02-10 14:13

Qaçan yeni satırlar istifadə etmək istəyirsinizsə, yaxşı istifadə edə bilərsiniz. Bir səhifə çərçivəsi olan bir sənədə bənzəyir .

2019

8
28 апр. Cavab seo 28 apr verilir . 2015-04-28 21:31 '15 at 21:31 'də 2015-04-28 21:31

IE, Safari, Chrome və Firefox-da işləyir:

 <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
23 нояб. Cavab hələ də davam edir. 2010-11-23 19:46 '10 at 19:46 2010-11-23 19:46

TypeScript (JavaScript SuperSet ) -dən istifadə edə bilərsiniz, çox satırlı simləri dəstəkləyir və heç bir yük olmadan təmiz JavaScript-ə çevrilir :

 var templates = { myString: `this is a multiline string` } alert(templates.myString); 

Düzgün javascript ilə eyni etmək istəyirsinizsə:

 var templates = { myString: function(){}.toString().slice(14,-3) } alert(templates.myString) 

Xahiş edirik unutmayın ki, iPad / Safari 'functionName.toString()'

Çox köhnəlmiş kodunuz varsa, TipScript-də (təmizləmə məqsədləri üçün) bir sadə JavaScript versiyası da istifadə edə bilərsiniz:

 interface externTemplates { myString:string; } declare var templates:externTemplates; alert(templates.myString) 

və bir şablonları başqa bir faylda yerləşdirdiyiniz sadə javascript versiyasından çox satırlı bir dize obyektindən istifadə edə bilərsiniz (bir dəstədə birləşdirə biləcəyiniz).

TypeScript-i cəhd edə bilərsiniz
http://www.typescript>

21 сент. 21 Sentyabrda Stefan Steiger tərəfindən verilmiş cavab 2015-09-21 18:23 '15 at 18:23 2015-09-21 18:23

Javascript bərabərliyi:

 var text = ` This Is A Multiline String `; 

Burada dəqiqləşdirmə . Bu səhifənin altındakı Brauzer dəstəyinə baxın. Burada bəzi nümunələr var .

7
04 нояб. Cavab Lonnie Best 04 noyabr tarixində verilir. 2015-11-04 16:59 '15 'də saat 16:59 ' da

Mənim məsləhətim on123.ru.site/questions/660 / .... O formada bir şərh gözləyir , simvol olduğu yer! (minimumu YUI kompressor üçün)

 Function.prototype.extractComment = function() { var startComment = ""; var str = this.toString(); var start = str.indexOf(startComment); var end = str.lastIndexOf(endComment); return str.slice(start + startComment.length, -(str.length - end)); }; 

Məsələn:

 var tmpl = function() { }.extractComment(); 
7
11 дек. Cavab pocheptsov verilir 11 Dekabr. 2013-12-11 20:30 '13 saat 20:30 'da 2013-12-11 20:30

ES6, bir sıra xəttlərdə bir xətt müəyyən etmək üçün bir qaytarma xəttindən istifadə etməyə imkan verir. Şablon adi deyildi. Burada:

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

Backtick istifadə NodeJS və Chrome, Firefox, Edge, Safari və Opera tərəfindən dəstəklənir.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

5
28 марта '16 в 21:43 2016-03-28 21:43 cavab 28 mart '09 'da 21:43 2016-03-28 21:43' də verilir

Javaskiplərdəki çox satırlı simləri yaratmaq üçün en asan yol geri bağlantılardan ('') istifadə etməkdir. Bu, ${variableName} ilə dəyişənləri əlavə edə biləcəyiniz çox satırlı strinqlər yaratmağa imkan verir.

Məsələn:

Burada Mozilla sənədlərində dəqiq uyğunluq yoxlayın. 

3
09 сент. Willem van der Veen 09 sentyabrdan cavablandırdı. 2018-09-09 14:00 '18 saat 14:00 'də 2018-09-09 14:00

Sətrinizi birləşdirmək üçün += istifadə edə bilərsiniz, heç kim bu cavab verə biləcək, oxunan və həmçinin səliqəli olacaq ... belə bir şey

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

həmçinin yaza bilərsiniz

 var hello = 'hello'; hello += ' world'; hello += ' blah'; console.log(hello); 
3
Cavab cənabə verildi. 18 янв. Alien 18 yanvar 2014-01-18 16:18 '14 saat 16:18 2014-01-18 16:18

Concat string üçün bir sıra əsaslı birləşmənin mənim versiyası:

 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')); 

Bu mənim üçün yaxşı işlədi, xüsusilə html-də bu şəkildə tikilmiş dəyərlər daxildir. Ancaq bir çox məhdudiyyət var. Girintilər gözəl olardı. Daxili quotes ilə məşğul olmaq çox gözəl olardı və bu yalnız mənfi narahatlıq məni.

Çox vaxt aparan bir sıra əlavə etmək üçün .push () işarəsi varmı? Cavabına baxın:

( JavaScript əsasən Array.push () istifadə etməyin səbəbləri varmı? )

Bu (əksinə) test işlərinə baxarkən, görünür ki, .push () 100 elementdən daha çox böyümək mümkün olmayan string dizilələri üçün böyükdür - mən böyük dizilər üçün endeksli əlavələrin lehinə çıxacağam.

3
14 окт. Cavab 14 oktyabrda KTys tərəfindən verilir . 2013-10-14 03:58 '13 at 3:58 2013-10-14 03:58

İnternet birləşməsindən istifadə edin və bu həll üçün ES6 istifadə etməyin. ES6 bütün istiqamətlərdə, məsələn, CSS3 kimi dəstəklənmir və bəzi brauzerlər yavaş-yavaş CSS3 hərəkətinə uyğundur. Sadə 'javascript istifadə edin, son istifadəçiləriniz təşəkkür edir.

Məsələn:

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

3
12 окт. Cavab 12 oktyabr Pragmatiq verilir . 2017-10-12 02:28 '17 də 2:28 2017-10-12 02:28

Həmçinin, hər bir xəttin sonunda bir çox sətirdə bir xətt uzadarkən, hər hansı bir əlavə simvol (əksəriyyətlə boşluqlar, sekmeler və səhvən əlavə edilən şərhlər) tersbacksdən sonra gözlənilməz xarakterli səhvlər, bir saat

 var string = "line1\ // comment, space or tabs here raise error line2"; 
3
13 июля '16 в 22:25 2016-07-13 22:25 Cavab Prakash GPz tərəfindən 13 İyul '16' da saat 10:25 'də 2016-07-13 22:25' də verilir

Birləşmə operatorunu "+" istifadə etməlisiniz.

 <!DOCTYPE html> <html > 

\n istifadə edərək, mənbə kodunuz belə görünür:

 Bu   <br> edir  multiline  <br> string.

Google istifadə edərək, brauzeriniz bu şəkildə görünəcək:

 Bu budur multiline simli.
2
14 авг. Cavab sonevol 14 avqust verilir . 2017-08-14 01:57 '17 da 1:57 2017-08-14 01:57

Hesab edirəm ki, bu həlli IE, Chrome, Firefox, Safari, Opera -

JQuery istifadə :

 <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> 

Təmiz javascriptdən istifadə edin:

 <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> 

Hooray !!

1
28 янв. Cavab Aditya Hajare 28 jan tərəfindən verilir . 2013-01-28 15:20 '13 saat 15:20 'də 2013-01-28 15:20

Yalnız Node'da işləyərsəniz fs modulunu fayldan bir çox satırda oxumaq üçün istifadə edə bilərsiniz:

 var diagram; var fs = require('fs'); fs.readFile( __dirname + '/diagram.txt', function (err, data) { if (err) { throw err; } diagram = data.toString(); }); 
0
09 сент. Charles Brandt tərəfindən verilmiş cavab 09.09 2014-09-09 03:02 '14 da 3:02 2014-09-09 03:02

Mən yalnız anonim bir cavab sınadı və burada kiçik bir oyun tapdıq, işləməyir, əgər arxa boşluqdan sonra bir boşluq varsa \
Beləliklə, aşağıdakı həll işləmir -

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

Ancaq yer boşaldıqda, işləyir -

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

Bu kömək edir!

0
23 нояб. Cavab 23 noyabrda Anmol Saraf tərəfindən verilir. 2012-11-23 16:10 '12 at 4:10 pm 2012-11-23 16:10
  • 1
  • 2

tags ilə əlaqəli digər suallar və ya bir sual