Saya memiliki kode berikut di Ruby. Saya ingin mengubah kode ini menjadi JavaScript. apa kode yang setara di JS?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
Saya memiliki kode berikut di Ruby. Saya ingin mengubah kode ini menjadi JavaScript. apa kode yang setara di JS?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
Jawaban:
Memperbarui:
ECMAScript 6 (ES6) memperkenalkan tipe literal baru, yaitu templat literals . Mereka memiliki banyak fitur, interpolasi variabel antara lain, tetapi yang paling penting untuk pertanyaan ini, mereka bisa multiline.
Literal template dibatasi oleh backticks :
(Catatan: Saya tidak menganjurkan untuk menggunakan HTML dalam string)
Dukungan peramban tidak masalah , tetapi Anda dapat menggunakan transponder agar lebih kompatibel.
Jawaban ES5 asli:
Javascript tidak memiliki sintaksis di sini-dokumen. Namun, Anda dapat keluar dari baris baru literal yang mendekati:
sumber
Pembaruan ES6:
Seperti jawaban pertama yang disebutkan, dengan ES6 / Babel, Anda sekarang dapat membuat string multi-line hanya dengan menggunakan backticks:
Variabel interpolasi adalah fitur baru yang populer yang dilengkapi dengan string pembatas back-tick:
Ini hanya berubah menjadi rangkai:
Jawaban ES5 asli:
sumber
\
bukannya `\` sulit untuk diperhatikan] dan (3) sementara sebagian besar mesin skrip mendukung ini, itu bukan bagian dari ECMAScript [yaitu alasannya menggunakan fitur yang tidak standar?] Ingat ini adalah panduan gaya, yaitu tentang membuat kode mudah dibaca + memelihara + debug: bukan hanya "berfungsi" dengan benar.polanya
text = <<"HERE" This Is A Multiline String HERE
tidak tersedia dalam js (saya ingat sering menggunakannya di hari Perl saya yang lama).Untuk menjaga pengawasan dengan string multiline yang kompleks atau panjang, terkadang saya menggunakan pola array:
atau pola anonim sudah ditampilkan (escape newline), yang bisa menjadi blok jelek dalam kode Anda:
Berikut ini 'trik' aneh tapi berhasil 1 :
sunting eksternal: jsfiddle
ES20xx mendukung spanning string melalui beberapa baris menggunakan string template :
1 Catatan: ini akan hilang setelah mengecilkan / mengaburkan kode Anda
sumber
Anda dapat memiliki string multiline dalam JavaScript murni.
Metode ini didasarkan pada serialisasi fungsi, yang didefinisikan bergantung pada implementasi . Ini berfungsi di sebagian besar browser (lihat di bawah), tetapi tidak ada jaminan bahwa itu akan tetap bekerja di masa depan, jadi jangan bergantung padanya.
Menggunakan fungsi berikut:
Anda dapat memiliki di sini-dokumen seperti ini:
Metode ini telah berhasil diuji di browser berikut (tidak disebutkan = tidak diuji):
Berhati-hatilah dengan minifier Anda. Itu cenderung menghapus komentar. Untuk kompresor YUI , komentar yang dimulai dengan
/*!
(seperti yang saya gunakan) akan dipertahankan.Saya pikir solusi nyata adalah menggunakan CoffeeScript .
ES6 UPDATE: Anda dapat menggunakan backtick alih-alih membuat fungsi dengan komentar dan menjalankan toString pada komentar. Regex harus diperbarui hanya ke ruang strip. Anda juga dapat memiliki metode prototipe string untuk melakukan ini:
Itu akan keren. Seseorang harus menulis metode string .removeIndentation ...;)
sumber
Kamu bisa melakukan ini...
sumber
Saya datang dengan metode yang sangat jimmy ini dari string multi-baris. Karena mengubah fungsi menjadi string juga mengembalikan komentar apa pun di dalam fungsi tersebut, Anda dapat menggunakan komentar sebagai string menggunakan komentar multilined / ** /. Anda hanya perlu memotong ujungnya dan Anda memiliki tali.
sumber
toString()
ituSaya terkejut saya tidak melihat ini, karena berfungsi di mana-mana saya sudah mengujinya dan sangat berguna untuk template misalnya:
Adakah yang tahu tentang lingkungan di mana ada HTML tetapi tidak berfungsi?
sumber
Saya memecahkan ini dengan mengeluarkan div, membuatnya tersembunyi, dan memanggil id id dengan jQuery ketika saya membutuhkannya.
misalnya
Lalu ketika saya perlu mendapatkan string, saya hanya menggunakan jQuery berikut:
Yang mengembalikan teks saya di beberapa baris. Jika saya menelpon
Saya mendapat:
sumber
display:none
konten, kemungkinan besar karena popularitas front-end bergaya JavaScript. (Misalnya, halaman FAQ dengan fungsi sembunyikan / tampilkan.) Namun Anda perlu berhati-hati, karena Google mengatakan mereka dapat menghukum Anda jika konten tersembunyi tampaknya dirancang untuk secara artifisial meningkatkan peringkat SEO Anda.Ada beberapa cara untuk mencapai ini
1. Rangkaian slash
2. penggabungan teratur
3. Array Bergabung dalam rangkaian
Dari segi kinerja, gabungan Slash (yang pertama) adalah yang tercepat.
Rujuk test case ini untuk detail lebih lanjut mengenai kinerja
Memperbarui:
Dengan ES2015 , kita dapat memanfaatkan fitur string Template. Dengan itu, kita hanya perlu menggunakan back-ticks untuk membuat string multi-line
Contoh:
sumber
Menggunakan tag skrip:
<script>...</script>
blok berisi teks multiline Anda ke dalamhead
tag;dapatkan teks multiline Anda apa adanya ... (hati-hati terhadap penyandian teks: UTF-8, ASCII)
sumber
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
Saya tidak ingat memiliki masalah lain selain salah ketik komentar di JS. Ruang di mana tidak ada masalah.Saya suka sintaks dan indendasi ini:
(tapi sebenarnya tidak bisa dianggap sebagai string multiline)
sumber
Ada perpustakaan yang membuatnya indah:
https://github.com/sindresorhus/multiline
Sebelum
Setelah
sumber
nodejs
, menggunakan di browser harus diperhatikan.Function.prototype.String()
.Downvoters : Kode ini disediakan hanya untuk informasi.
Ini telah diuji dalam Fx 19 dan Chrome 24 di Mac
DEMO
sumber
Singkatnya, saya telah mencoba 2 pendekatan yang tercantum di sini dalam pemrograman javascript pengguna (Opera 11.01):
Jadi saya merekomendasikan pendekatan kerja untuk pengguna Opera JS pengguna. Berbeda dengan apa yang penulis katakan:
Ini TIDAK bekerja di Opera 11. Setidaknya dalam skrip JS pengguna. Sayang sekali saya tidak bisa mengomentari jawaban individu atau membatalkan jawaban, saya akan segera melakukannya. Jika memungkinkan, seseorang dengan hak istimewa yang lebih tinggi tolong lakukan untuk saya.
sumber
Ekstensi saya ke https://stackoverflow.com/a/15558082/80404 . Itu mengharapkan komentar dalam bentuk di
/*! any multiline comment */
mana simbol! digunakan untuk mencegah penghapusan dengan minifikasi (setidaknya untuk kompresor YUI)Contoh:
sumber
Diperbarui untuk 2015 : sekarang enam tahun kemudian: kebanyakan orang menggunakan pemuat modul, dan sistem modul utama masing-masing memiliki cara memuat templat. Ini bukan inline, tetapi tipe multiline string yang paling umum adalah templat, dan templat umumnya harus dijauhkan dari JS .
require.js: 'memerlukan teks'.
Menggunakan plugin 'text' require.js , dengan template multiline di template.html
NPM / browserify: modul 'brfs'
Browserify menggunakan modul 'brfs' untuk memuat file teks. Ini sebenarnya akan membangun template Anda ke dalam HTML bundel Anda.
Mudah.
sumber
Jika Anda bersedia menggunakan baris baru yang lolos, mereka dapat digunakan dengan baik . Itu terlihat seperti dokumen dengan batas halaman .
sumber
Setara dalam javascript adalah:
Berikut spesifikasinya . Lihat dukungan browser di bagian bawah halaman ini . Berikut ini beberapa contohnya .
sumber
Ini berfungsi di IE, Safari, Chrome dan Firefox:
sumber
Anda dapat menggunakan TypeScript (JavaScript SuperSet), itu mendukung string multiline, dan transpiles kembali ke JavaScript murni tanpa overhead:
Jika Anda ingin mencapai hal yang sama dengan JavaScript biasa:
Perhatikan bahwa iPad / Safari tidak mendukung
'functionName.toString()'
Jika Anda memiliki banyak kode lawas, Anda juga dapat menggunakan varian JavaScript biasa di TypeScript (untuk tujuan pembersihan):
dan Anda dapat menggunakan objek multiline-string dari varian JavaScript polos, tempat Anda meletakkan templat ke file lain (yang dapat Anda gabungkan dalam bundel).
Anda dapat mencoba TypeScript di
http://www.typescriptlang.org/Playground
sumber
Cara ES6 melakukannya adalah dengan menggunakan literal templat:
Lebih banyak referensi di sini
sumber
ES6 memungkinkan Anda untuk menggunakan backtick untuk menentukan string pada banyak baris. Ini disebut Templat Literal. Seperti ini:
Menggunakan backtick berfungsi di NodeJS, dan didukung oleh Chrome, Firefox, Edge, Safari, dan Opera.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
sumber
Cara termudah untuk membuat string multiline dalam Javascrips adalah dengan menggunakan backticks (``). Ini memungkinkan Anda membuat string multiline tempat Anda dapat memasukkan variabel
${variableName}
.Contoh:
kompatibilitas:
ES6
//es2015
Periksa kompatibilitas yang tepat dalam dokumen Mozilla di sini
sumber
Versi saya dari penggabungan berbasis array untuk string concat:
Ini telah bekerja dengan baik untuk saya, terutama karena saya sering memasukkan nilai ke dalam html yang dibangun dengan cara ini. Tetapi memiliki banyak keterbatasan. Lekukan akan menyenangkan. Tidak harus berurusan dengan tanda kutip bersarang akan sangat bagus, dan hanya besarnya itu menggangguku.
Apakah .push () untuk menambah array membutuhkan banyak waktu? Lihat jawaban terkait ini:
( Apakah ada alasan pengembang JavaScript tidak menggunakan Array.push ()? )
Setelah melihat ini (berlawanan) uji coba berjalan, sepertinya .push () baik untuk array string yang tidak akan tumbuh lebih dari 100 item - saya akan menghindarinya dengan menambahkan indeks untuk array yang lebih besar.
sumber
Anda dapat menggunakannya
+=
untuk menyatukan string Anda, sepertinya tidak ada yang menjawab itu, yang akan dapat dibaca, dan juga rapi ... sesuatu seperti inidapat juga ditulis sebagai
sumber
Juga perhatikan bahwa, ketika memperluas string melalui beberapa baris menggunakan backslash maju di akhir setiap baris, karakter tambahan apa pun (kebanyakan spasi, tab, dan komentar ditambahkan secara tidak sengaja) setelah forward backslash akan menyebabkan kesalahan karakter yang tidak terduga, yang saya perlukan waktu satu jam untuk menemukan di luar
sumber
Tolong untuk cinta internet menggunakan penggabungan string dan memilih untuk tidak menggunakan solusi ES6 untuk ini. ES6 TIDAK didukung di seluruh papan, seperti CSS3 dan browser tertentu lambat beradaptasi dengan gerakan CSS3. Gunakan JavaScript polos, pengguna akhir Anda akan berterima kasih.
Contoh:
var str = "This world is neither flat nor round. "+ "Once was lost will be found";
sumber
Anda harus menggunakan operator gabungan '+'.
Dengan menggunakan
\n
kode sumber Anda akan terlihat seperti -Dengan menggunakan
<br>
output browser Anda akan terlihat seperti -sumber
Saya pikir solusi ini harus bekerja di IE, Chrome, Firefox, Safari, Opera -
Menggunakan jQuery :
Menggunakan Javascript Murni:
Bersulang!!
sumber
<xmp>
sangat usang. Mungkin diizinkan dalam HTML, tetapi tidak boleh digunakan oleh penulis mana pun. Lihat stackoverflow.com/questions/8307846/…<pre>;
dengan lolos tidak akan membantu dalam solusi saya .. Saya menemukan masalah yang sama hari ini dan mencoba mencari solusi .. tapi dalam kasus saya, saya menemukan satu cara yang sangat n00bish untuk memperbaiki masalah ini dengan menempatkan output dalam komentar html alih-alih <xmp> atau tag lainnya. lol. Saya tahu ini bukan cara standar untuk melakukan ini, tetapi saya akan mengerjakan masalah ini lagi besok pagi .. Bersorak-sorai !!style="display:none"
Chrome mencoba memuat<img>
gambar apa pun yang disebutkan dalam contoh blok.Coba saja jawaban Anonim dan temukan ada sedikit trik di sini, itu tidak berfungsi jika ada spasi setelah backslash
\
Jadi solusi berikut tidak bekerja -
Tetapi ketika ruang dihapus itu berfungsi -
Semoga ini bisa membantu !!
sumber