Cara menambahkan string HTML ini
var str = '<p>Just some <span>text</span> here</p>';
ke DIV dengan ID 'test'
yang ada di DOM?
(Btw div.innerHTML += str;
tidak dapat diterima.)
Cara menambahkan string HTML ini
var str = '<p>Just some <span>text</span> here</p>';
ke DIV dengan ID 'test'
yang ada di DOM?
(Btw div.innerHTML += str;
tidak dapat diterima.)
Jawaban:
Gunakan insertAdjacentHTML
jika tersedia, jika tidak, gunakan semacam fallback. insertTentangHTML didukung di semua browser saat ini .
div.insertAdjacentHTML( 'beforeend', str );
Demo langsung: http://jsfiddle.net/euQ5n/
insertAdjacentHTML
lebih cepat daripada menambahkan ke innerHTML
, karena insertAdjacentHTML
tidak membuat serial dan reparse turunan elemen yang sudah ada.
insertAdjacentHTML
mempertahankan nilai elemen formulir yang diubah, sedangkan menambahkan untuk innerHTML
membangun kembali elemen dan kehilangan semua konteks formulir.
Apakah ini dapat diterima?
var child = document.createElement('div');
child.innerHTML = str;
child = child.firstChild;
document.getElementById('test').appendChild(child);
jsFiddle .
Tapi , jawaban Neil adalah solusi yang lebih baik.
innerHTML
?
insertAdjacentHTML
.
AppendChild
(E) lebih dari 2x lebih cepat daripada solusi lain di chrome dan safari, insertAdjacentHTML
(F) tercepat di firefox. The innerHTML=
(B) (tidak bingung dengan +=
(A)) adalah solusi cepat kedua pada semua browser dan itu jauh lebih berguna daripada E dan F.
Lingkungan pengaturan (2019.07.10) MacOs High Sierra 10.13.4 di Chrome 75.0.3770 (64-bit), Safari 11.1.0 (13604.5.6), Firefox 67.0.0 (64-bit)
Anda dapat memutar ulang pengujian di mesin Anda di sini
Idenya adalah menggunakan innerHTML
elemen perantara dan kemudian memindahkan semua node turunannya ke tempat yang Anda inginkan appendChild
.
var target = document.getElementById('test');
var str = '<p>Just some <span>text</span> here</p>';
var temp = document.createElement('div');
temp.innerHTML = str;
while (temp.firstChild) {
target.appendChild(temp.firstChild);
}
Ini untuk menghindari penghapusan semua penangan acara, div#test
tetapi masih memungkinkan Anda untuk menambahkan string HTML.
Cara yang benar adalah menggunakan insertAdjacentHTML
. Di Firefox sebelum 8, Anda dapat kembali menggunakan Range.createContextualFragment
jika Anda str
tidak berisi script
tag.
Jika Anda str
mengandung script
tag, Anda perlu menghapus script
elemen dari fragmen yang dikembalikan oleh createContextualFragment
sebelum memasukkan fragmen. Jika tidak, skrip akan berjalan. ( insertAdjacentHTML
menandai skrip tidak dapat dieksekusi.)
createContextualFragment
. Saya sedang mencari cara untuk membuat beberapa html yang disertakan dengan skrip yang dijalankan hanya jika pengguna setuju untuk mengatur cookie.
Retas Cepat :
<script>
document.children[0].innerHTML="<h1>QUICK_HACK</h1>";
</script>
Kasus Penggunaan :
1: Simpan sebagai file .html dan jalankan di chrome atau firefox atau edge. (IE tidak akan berfungsi)
2: Gunakan di http://js.do
Beraksi: http://js.do/HeavyMetalCookies/quick_hack
Dipecah dengan komentar:
<script>
//: The message "QUICK_HACK"
//: wrapped in a header #1 tag.
var text = "<h1>QUICK_HACK</h1>";
//: It's a quick hack, so I don't
//: care where it goes on the document,
//: just as long as I can see it.
//: Since I am doing this quick hack in
//: an empty file or scratchpad,
//: it should be visible.
var child = document.children[0];
//: Set the html content of your child
//: to the message you want to see on screen.
child.innerHTML = text;
</script>
Alasan saya memposting:
JS.do memiliki dua hal yang harus dimiliki:
Tapi tidak menampilkan pesan console.log. Datang ke sini mencari solusi cepat. Saya hanya ingin melihat hasil dari beberapa baris kode papan gores, solusi lainnya terlalu banyak bekerja.
Mengapa itu tidak bisa diterima?
document.getElementById('test').innerHTML += str
akan menjadi cara buku teks melakukannya.
#test
. Itu umumnya tidak diinginkan.
Ini bisa memecahkan
document.getElementById("list-input-email").insertAdjacentHTML('beforeend', '<div class=""><input type="text" name="" value="" class="" /></div>');
InnerHTML menghapus semua data seperti acara untuk node yang ada
menambahkan anak dengan firstChild hanya menambahkan anak pertama ke innerHTML. Misalnya jika kita harus menambahkan:
<p>text1</p><p>text2</p>
hanya teks1 yang akan muncul
Bagaimana dengan ini:
menambahkan tag khusus ke innerHTML dengan menambahkan anak lalu mengedit HTML luar dengan menghapus tag yang telah kita buat. Tidak tahu seberapa pintar itu tetapi berfungsi untuk saya atau Anda mungkin mengubah HTML luar ke dalamHTML sehingga tidak harus menggunakan fungsi pengganti
function append(element, str)
{
var child = document.createElement('someshittyuniquetag');
child.innerHTML = str;
element.appendChild(child);
child.outerHTML = child.outerHTML.replace(/<\/?someshittyuniquetag>/, '');
// or Even child.outerHTML = child.innerHTML
}
<div id="testit">
This text is inside the div
<button onclick="append(document.getElementById('testit'), '<button>dadasasdas</button>')">To div</button>
<button onclick="append(this, 'some text')">to this</button>
</div>
Terpendek - 18 karakter (tidak membingungkan +=
(disebutkan oleh OP) dengan =
detail lebih lanjut di sini )
test.innerHTML=str
innerHTML
menempatkan string ke dalam elemen (menggantikan semua anak), sedangkaninsertAdjacentHTML
menempatkannya (1) sebelum elemen, (2) setelah elemen, (3) di dalam elemen sebelum anak pertama, atau (4) di dalam elemen setelah anak terakhir.