Mam następujący kod w Ruby. Chcę przekonwertować ten kod na JavaScript. jaki jest równoważny kod w JS?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
Mam następujący kod w Ruby. Chcę przekonwertować ten kod na JavaScript. jaki jest równoważny kod w JS?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
Odpowiedzi:
Aktualizacja:
ECMAScript 6 (ES6) wprowadza nowy typ literałów, mianowicie literały szablonów . Mają wiele cech, między innymi zmienną interpolację, ale co najważniejsze w przypadku tego pytania, mogą być wieloliniowe.
Literał szablonu jest ograniczony przez backticks :
(Uwaga: nie zalecam używania HTML w ciągach znaków)
Obsługa przeglądarki jest OK , ale można użyć transpilatorów, aby być bardziej kompatybilnym.
Oryginalna odpowiedź ES5:
JavaScript nie ma składni dokumentu tutaj. Możesz jednak uciec od dosłownego nowego wiersza, który jest zbliżony:
źródło
Aktualizacja ES6:
Jak wspomniano w pierwszej odpowiedzi, za pomocą ES6 / Babel możesz teraz tworzyć wieloliniowe ciągi znaków, używając tylko backticks:
Zmienne interpolacyjne to popularna nowa funkcja, która zawiera ciągi rozdzielone znakami cofania:
To po prostu przenosi się do konkatenacji:
Oryginalna odpowiedź ES5:
źródło
\
zamiast `\ 'trudno zauważyć] i (3), podczas gdy większość silników skryptowych obsługuje to, nie jest to część ECMAScript [tzn. Dlaczego korzystać z niestandardowych funkcji?] Pamiętaj, że to przewodnik po stylu, który ułatwia czytanie kodu + utrzymanie + debugowanie: nie tylko „działa” poprawnie.wzorzec
text = <<"HERE" This Is A Multiline String HERE
nie jest dostępny w js (pamiętam, że używam go dużo w moich starych dobrych czasach Perla).Aby zachować nadzór nad złożonymi lub długimi ciągami wielowierszowymi, czasami używam wzorca tablicowego:
lub wzorzec anonimowy już pokazany (escape newline), co może być brzydkim blokiem w kodzie:
Oto kolejna dziwna, ale działająca „sztuczka” 1 :
edycja zewnętrzna: jsfiddle
ES20xx obsługuje ciągi znaków obejmujące wiele wierszy za pomocą ciągów szablonów :
1 Uwaga: zostanie to utracone po zminimalizowaniu / zaciemnieniu kodu
źródło
Państwo może mieć multilinii sznurki w czystym JavaScript.
Ta metoda opiera się na serializacji funkcji, która jest zdefiniowana jako zależna od implementacji . Działa w większości przeglądarek (patrz poniżej), ale nie ma gwarancji, że nadal będzie działać w przyszłości, więc nie należy na nim polegać.
Korzystanie z następującej funkcji:
Możesz mieć tutaj takie dokumenty:
Metoda została pomyślnie przetestowana w następujących przeglądarkach (nie wspomniano = nie przetestowano):
Uważaj jednak na swój minizator. Ma tendencję do usuwania komentarzy. W przypadku kompresora YUI komentarz rozpoczynający się od
/*!
(jak ten, którego użyłem) zostanie zachowany.Myślę, że prawdziwym rozwiązaniem byłoby użycie CoffeeScript .
AKTUALIZACJA ES6: Możesz użyć strzałki wstecz zamiast tworzyć funkcję z komentarzem i uruchamiać toString na komentarzu. Wyrażenie regularne musiałoby zostać zaktualizowane tak, aby zawierało tylko spacje. Możesz również mieć prototypową metodę łańcuchową, aby to zrobić:
To by było super. Ktoś powinien napisać tę metodę ciągu .removeIndentation ...;)
źródło
Możesz to zrobić...
źródło
Wymyśliłem tę bardzo jimmy sfałszowaną metodę sznurka z wieloma liniami. Ponieważ konwersja funkcji na ciąg zwraca również wszelkie komentarze wewnątrz funkcji, można używać komentarzy jako ciągów przy użyciu komentarza wielowarstwowego / ** /. Musisz tylko obciąć końce i masz swój sznurek.
źródło
toString()
)Dziwi mnie, że tego nie widziałem, ponieważ działa wszędzie, gdzie go przetestowałem i jest bardzo przydatny np. Dla szablonów:
Czy ktoś wie o środowisku, w którym jest HTML, ale on nie działa?
źródło
Rozwiązałem to, wypisując div, ukrywając go i wywołując div div przez jQuery, kiedy tego potrzebowałem.
na przykład
Następnie, gdy muszę uzyskać ciąg, po prostu używam następującego jQuery:
Co zwraca mój tekst w wielu wierszach. Jeśli zadzwonię
Dostaję:
źródło
display:none
treści, najprawdopodobniej ze względu na popularność interfejsów w stylu JavaScript. (Na przykład strona z najczęściej zadawanymi pytaniami z funkcją ukrywania / pokazywania.) Musisz jednak zachować ostrożność, ponieważ Google twierdzi, że mogą cię ukarać, jeśli ukryta treść wydaje się być zaprojektowana w celu sztucznego zawyżania pozycji w rankingu SEO.Istnieje wiele sposobów na osiągnięcie tego
1. Slat konkatenacja
2. regularna konkatenacja
3. Szyk Dołącz do konkatenacji
Pod względem wydajności konkatenacja Slash (pierwsza) jest najszybsza.
Zapoznaj się z tym przypadkiem testowym, aby uzyskać więcej informacji dotyczących wydajności
Aktualizacja:
Dzięki ES2015 możemy skorzystać z funkcji ciągów szablonów. Dzięki temu musimy po prostu używać tyknięć wstecznych do tworzenia ciągów wieloliniowych
Przykład:
źródło
Korzystanie ze znaczników skryptu:
<script>...</script>
blok zawierający tekst wielowierszowy dohead
znacznika;uzyskaj tekst wielowierszowy taki, jaki jest ... (uważaj na kodowanie tekstu: UTF-8, ASCII)
źródło
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
Nie pamiętam innych problemów niż błędne wpisywanie komentarzy w JS. Miejsca, w których nie ma problemów.Podoba mi się ta składnia i indendacja:
(ale tak naprawdę nie może być traktowany jako ciąg wielowierszowy)
źródło
Jest taka biblioteka, która sprawia, że jest piękna:
https://github.com/sindresorhus/multiline
Przed
Po
źródło
nodejs
korzystaniu z przeglądarki musi być godne uwagi.Function.prototype.String()
.Downvoters : Ten kod jest dostarczany wyłącznie w celach informacyjnych.
Zostało to przetestowane w Fx 19 i Chrome 24 na Macu
PRÓBNY
źródło
Podsumowując, wypróbowałem 2 podejścia wymienione tutaj w programowaniu javascript użytkownika (Opera 11.01):
Polecam więc podejście robocze użytkownikom JS użytkownika Opery. W przeciwieństwie do tego, co mówił autor:
Działa w Operze 11. Przynajmniej w skryptach JS użytkownika. Szkoda, że nie mogę komentować poszczególnych odpowiedzi ani głosować za odpowiedzią, zrobiłbym to natychmiast. Jeśli to możliwe, zrób to dla mnie z wyższymi uprawnieniami.
źródło
Moje rozszerzenie do https://stackoverflow.com/a/15558082/80404 . Oczekuje komentarza w postaci
/*! any multiline comment */
symbolu! służy do zapobiegania usuwaniu przez minimalizację (przynajmniej w przypadku kompresora YUI)Przykład:
źródło
Zaktualizowany do 2015 roku : teraz sześć lat później: większość osób korzysta z modułu ładującego moduły, a każdy z głównych systemów modułów ma sposoby ładowania szablonów. Nie jest on wbudowany, ale najpopularniejszym typem ciągu wielowierszowego są szablony, a szablony i tak powinny być ogólnie trzymane poza JS .
wymaga.js: „wymaga tekstu”.
Korzystanie z wtyczki „wymaganej” tekstu text.js z szablonem wielowierszowym w template.html
NPM / Browserify: moduł „brfs”
Browserify używa modułu „brfs” do ładowania plików tekstowych. To faktycznie zbuduje twój szablon w pakiecie HTML.
Łatwy.
źródło
Jeśli chcesz użyć uciekających nowych linii, można je ładnie wykorzystać . Wygląda jak dokument z ramką strony .
źródło
Odpowiednikiem w javascript jest:
Oto specyfikacja . Zobacz obsługę przeglądarki na dole tej strony . Oto kilka przykładów .
źródło
Działa to w IE, Safari, Chrome i Firefox:
źródło
Możesz użyć TypeScript (JavaScript SuperSet), obsługuje ciągi wielowierszowe i transponuje z powrotem do czystego JavaScript bez narzutu:
Jeśli chcesz to zrobić za pomocą zwykłego JavaScript:
Pamiętaj, że iPad / Safari nie obsługuje
'functionName.toString()'
Jeśli masz dużo starszego kodu, możesz również użyć zwykłego wariantu JavaScript w TypeScript (do celów czyszczenia):
i możesz użyć obiektu wielowierszowego z prostego wariantu JavaScript, w którym umieścisz szablony w innym pliku (który możesz scalić w pakiecie).
Możesz wypróbować TypeScript na
stronie http://www.typescriptlang.org/Playground
źródło
Sposób ES6 polegałby na użyciu literałów szablonów:
Więcej informacji tutaj
źródło
ES6 umożliwia użycie ciągu wstecznego do określenia ciągu w wielu wierszach. To się nazywa dosłowny szablon. Lubię to:
Korzystanie z backticka działa w NodeJS i jest obsługiwane przez Chrome, Firefox, Edge, Safari i Opera.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
źródło
Najprostszym sposobem na tworzenie ciągów wielowierszowych w Javascrips jest użycie backticks (``). Pozwala to tworzyć ciągi wielowierszowe, w których można wstawiać zmienne
${variableName}
.Przykład:
zgodność :
ES6
//es2015
Sprawdź dokładną zgodność w dokumentach Mozilli tutaj
źródło
Moja wersja łączenia opartego na macierzy dla konkatacji ciągów:
Działa to dla mnie dobrze, zwłaszcza, że często wstawiam wartości do tak skonstruowanego HTML. Ale ma wiele ograniczeń. Wcięcie byłoby fajne. Naprawdę miło byłoby nie mieć do czynienia z zagnieżdżonymi cudzysłowami, a sama masowość przeszkadza mi.
Czy dodanie .push () do tablicy zajmuje dużo czasu? Zobacz tę pokrewną odpowiedź:
( Czy istnieje powód, dla którego programiści JavaScript nie używają Array.push ()? )
Po spojrzeniu na te (przeciwne) przebiegi testowe, wygląda na to, że .push () jest odpowiedni dla tablic łańcuchowych, które prawdopodobnie nie wzrosną powyżej 100 elementów - uniknę tego na korzyść indeksowanych dodatków dla większych tablic.
źródło
Możesz użyć
+=
do połączenia swojego łańcucha, wygląda na to, że nikt nie odpowiedział na to, co będzie czytelne, a także schludne ... coś takiegomożna również zapisać jako
źródło
Zauważ też, że podczas przedłużania ciągu na wiele linii za pomocą odwrotnego ukośnika na końcu każdego wiersza wszelkie dodatkowe znaki (głównie spacje, tabulatory i komentarze dodane przez pomyłkę) po odwrotnym odwrotnym ukośniku spowodują nieoczekiwany błąd znakowy, którego znalezienie zajęło mi godzinę na zewnątrz
źródło
Z miłości do Internetu korzystaj z konkatenacji łańcuchów i nie używaj do tego rozwiązań ES6. ES6 NIE jest obsługiwany na całym forum, podobnie jak CSS3, a niektóre przeglądarki powoli dostosowują się do ruchu CSS3. Używaj zwykłego kodu JavaScript, użytkownicy końcowi będą Ci wdzięczni.
Przykład:
var str = "This world is neither flat nor round. "+ "Once was lost will be found";
źródło
Musisz użyć operatora konkatenacji „+”.
Za pomocą
\n
kodu źródłowego będzie wyglądać -Za pomocą
<br>
przeglądarki dane wyjściowe będą wyglądać następująco:źródło
Myślę, że to obejście powinno działać w IE, Chrome, Firefox, Safari, Opera -
Korzystanie z jQuery :
Korzystanie z czystego Javascript:
Twoje zdrowie!!
źródło
<xmp>
jest przestarzałe. Może to być dozwolone w HTML, ale nie powinno być używane przez żadnego autora. Zobacz stackoverflow.com/questions/8307846/…<pre>;
z ucieczkami nie pomoże w moim rozwiązaniu .. Natknąłem się dzisiaj na podobny problem i próbuję wymyślić obejście .. ale w moim przypadku znalazłem jeden bardzo n00bish sposób na rozwiązanie tego problemu przez umieszczanie danych wyjściowych w komentarzach HTML zamiast <xmp> lub dowolnego innego znacznika. lol. Wiem, że nie jest to standardowy sposób, ale jutro rano będę pracować nad tym zagadnieniem. Pozdrawiam !!style="display:none"
Chrome próbuje załadować dowolne<img>
obrazy wymienione w przykładowym bloku.Po prostu wypróbowałem Anonimową odpowiedź i okazało się, że jest tu mała sztuczka, nie działa, jeśli jest odstęp po odwrotnym ukośniku,
\
więc następujące rozwiązanie nie działa -
Ale gdy przestrzeń zostanie usunięta, działa -
Mam nadzieję, że to pomoże !!
źródło