konversi html ke string html dalam file JS


14

Saya ingin membuat beberapa html melalui JS, oleh karena itu saya perlu menulis html di dalam file JS seperti:

function createHtmlSection() {
    return "<li class=\"chapter up-wrapper-btn\">" +
        "<div>" +
        "<button><i class=\"fa fa-plus\" onclick=\"addSection('up',this)\"></i></button>" +
        "<label contenteditable=\"true\">section 1</label>" +
        "</div>" +
        "</li>";
}

apakah ada alat atau jalan pintas untuk membuat jenis string html ini?

Maksud saya, dalam hal ini saya harus mengetik semua html ini dengan tangan. dengan +dan perlu menambahkan "tanda.

Sesuatu yang dapat mengonversikan ini:

<li class="chapter up-wrapper-btn">
    <div>
       <button><i class="fa fa-plus" onclick="addSection('up',this)"></i></button>
        <label contenteditable="true">section 1</label>
     </div>
</li>

ke string pertama yang saya butuhkan untuk mengetik dengan tangan


Dari mana skrip Anda akan mendapatkan HTML yang ingin dikonversi menjadi string?
George Bora

Posting ini harus menjawab masalah Anda: stackoverflow.com/questions/220603/…
lainatnavi

Jawaban:


7

Anda dapat menggunakan templat literal (perhatikan kutu belakang). Literal ini mendukung multiline, dan Anda tidak perlu melarikan diri dari tanda kutip (Anda harus keluar dari kutu belakang).

`<li class="chapter up-wrapper-btn">
    <div>
       <button><i class="fa fa-plus" onclick="addSection('up',this)"></i></button>
        <label contenteditable="true">section 1</label>
     </div>
</li>`

Contoh:

function createHtmlSection() {
  return `
    <li class="chapter up-wrapper-btn">
        <div>
           <button><i class="fa fa-plus" onclick="addSection('up',this)"></i></button>
            <label contenteditable="true">section 1</label>
         </div>
    </li>
  `;
}


document.querySelector('#root')
  .innerHTML = createHtmlSection();
<ul id="root"></ul>

Anda juga bisa meneruskan parameter ke fungsi, dan menyisipkannya ke string menggunakan interpolasi ekspresi :


3
Jawaban Bagus, tetapi penting untuk mengatakan bahwa ini adalah ES6-Sintaks yang tidak didukung oleh semua browser. Jadi Anda akan membutuhkan sesuatu seperti Babel untuk mengkompilasi kode Anda ke JavaScript yang kompatibel dengan browser (ES5).
Alex-HM

2
Inilah mengapa saya menambahkan tautan ke MDN. Mereka memiliki tabel kompatibilitas di bagian bawah. Saat ini satu-satunya browser yang tidak mendukung literal templat adalah IE.
Ori Drori

3

perbarui file JS Anda ke:

function createHtmlSection() {
    return `
             <li class="chapter up-wrapper-btn">
                <div>
                  <button>
                     <i class="fa fa-plus" onclick="addSection('up',this)"></i> 
                  </button>
                  <label contenteditable="true">section 1</label>
               </div>
             </li>
          `
}

Baca tautan ini untuk informasi lebih lanjut: templat literals


1

Anda juga dapat menggunakan '(satu kutipan) sehingga Anda tidak harus meletakkan / depan setiap "


1

Cukup gunakan templat literal (bukan tanda kutip tunggal "'" tetapi centang-belakang "` ") seperti ini:

// JavaScript

document.getElementById("a").innerHTML = `<li class="chapter up-wrapper-btn">
    <div>
       <button><i class="fa fa-plus" onclick="addSection('up',this)"></i></button>
        <label contenteditable="true">section 1</label>
     </div>
</li>`
<!-- HTML -->

<div id="a"></div>

Literal templat adalah literal string yang memungkinkan ekspresi tersemat. Anda dapat menggunakan fitur multi-line string dan interpolasi string. Mereka disebut "templat string" dalam edisi sebelumnya dari spesifikasi ES2015.

Via - MDN Web Documents


1

Metode alternatif adalah dengan menggunakan tanda kutip tunggal dan keluar dari karakter baris baru.

Sesuatu seperti ini:

function createHtmlSection() {
    return '<li class="chapter up-wrapper-btn">\
        <div>\
            <button><i class="fa fa-plus" onclick="addSection(\'up\',this)"></i></button>\
            <label contenteditable="true">section 1</label>\
        </div>\
    </li>';
}

console.log(createHtmlSection());

Bertukar dengan tanda kutip tunggal menyelamatkan Anda dari lolosnya tanda kutip ganda dalam HTML, tetapi Anda masih perlu mengutip tanda kutip tunggal.


Alternatif lain adalah menggunakan array dan .join(''):

function createHtmlSection() {
    return [
	'<li class="chapter up-wrapper-btn">',
            '<div>',
                '<button><i class="fa fa-plus" onclick="addSection(\'up\',this)"></i></button>',
                '<label contenteditable="true">section 1</label>',
            '</div>',
        '</li>'
    ].join('');
}

console.log(createHtmlSection());

Ini memungkinkan Anda untuk dengan mudah menambah / mengedit / menghapus bagian-bagian kode nanti.


Kedua opsi ini untuk ES5 atau lebih lama.

Untuk peramban modern, silakan gunakan versi ES6 yang disediakan oleh Ori Drori .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.