Bu HTML dizesi nasıl eklenir
var str = '<p>Just some <span>text</span> here</p>';
DOM'da bulunan kimliğe 'test'
sahip DIV'ye?
(Btw div.innerHTML += str;
kabul edilmez.)
Bu HTML dizesi nasıl eklenir
var str = '<p>Just some <span>text</span> here</p>';
DOM'da bulunan kimliğe 'test'
sahip DIV'ye?
(Btw div.innerHTML += str;
kabul edilmez.)
Yanıtlar:
insertAdjacentHTML
Varsa kullanın , aksi takdirde bir çeşit geri dönüş kullanın. insertAdjacentHTML mevcut tüm tarayıcılarda desteklenmektedir .
div.insertAdjacentHTML( 'beforeend', str );
Canlı demo: http://jsfiddle.net/euQ5n/
insertAdjacentHTML
, öğeye eklemekten daha hızlıdır innerHTML
, çünkü insertAdjacentHTML
öğenin mevcut alt öğelerini serileştirmez ve yeniden ayrıştırmaz.
insertAdjacentHTML
değiştirilen form öğelerinin değerlerini korurken, ekleme innerHTML
, öğeyi yeniden oluşturur ve tüm form bağlamını kaybeder.
Bu kabul edilebilir mi?
var child = document.createElement('div');
child.innerHTML = str;
child = child.firstChild;
document.getElementById('test').appendChild(child);
jsFiddle .
Ama , Neil'in cevabı daha iyi bir çözümdür.
innerHTML
?
insertAdjacentHTML
.
AppendChild
(E) krom ve safarideki diğer çözümlerden 2 kat daha hızlıdır, insertAdjacentHTML
(F) firefox'ta en hızlısıdır. innerHTML=
(B) (ile değil şaşırtmak do +=
) A () tüm tarayıcılarda ikinci hızlı bir çözümdür ve E ve F çok daha kullanışlı
Chrome 75.0.3770 (64-bit), Safari 11.1.0 (13604.5.6), Firefox 67.0.0 (64-bit) üzerinde ortam kurma (2019.07.10) MacOs High Sierra 10.13.4
Burada makinenizde testi tekrar oynayabilirsiniz
Buradaki fikir, innerHTML
bir aracı öğe üzerinde kullanmak ve ardından tüm alt düğümlerini gerçekten istediğiniz yere taşımaktır 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);
}
Bu, herhangi bir olay işleyicisinin silinmesini önler, div#test
ancak yine de bir HTML dizesi eklemenize izin verir.
Doğru yol kullanmaktır insertAdjacentHTML
. Daha önce 8'den Firefox'ta, kullanmakta geri düşebilir Range.createContextualFragment
senin eğer str
hiçbir içeriyor script
etiketleri.
Eğer senin str
içeren script
etiketler, kaldırmak gerekir script
tarafından döndürülen parçasından elemanları createContextualFragment
fragman takmadan önce. Aksi takdirde, betikler çalışacaktır. ( insertAdjacentHTML
komut dosyalarını yürütülemez olarak işaretler.)
createContextualFragment
. Yalnızca kullanıcı bir çerez ayarlamayı kabul ederse, komut dosyalarıyla birlikte bazı html içermelerini çalıştırmanın bir yolunu arıyordum.
Hızlı Hack :
<script>
document.children[0].innerHTML="<h1>QUICK_HACK</h1>";
</script>
Kullanım Durumları :
1: .html dosyası olarak kaydedin ve chrome veya firefox veya edge'de çalıştırın. (IE işe yaramaz)
2: http : //js.do'da kullanın
Eylemde: http://js.do/HeavyMetalCookies/quick_hack
Yorumlarla ayrıldı:
<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>
Yayınlamamın Nedeni:
JS.do'nun sahip olması gereken iki şey vardır:
Ancak console.log mesajlarını göstermez. Hızlı bir çözüm bulmak için buraya geldim. Sadece birkaç satırlık kazı kazan kodunun sonuçlarını görmek istiyorum, diğer çözümler çok fazla iş.
Bu neden kabul edilemez?
document.getElementById('test').innerHTML += str
bunu yapmanın ders kitabı yolu olurdu.
#test
. Bu genellikle arzu edilen bir durum değildir.
Bu çözebilir
document.getElementById("list-input-email").insertAdjacentHTML('beforeend', '<div class=""><input type="text" name="" value="" class="" /></div>');
InnerHTML, mevcut düğümler için olay gibi tüm verileri temizler
firstChild ile alt öğe eklemek, yalnızca ilk çocuğu innerHTML'ye ekler. Örneğin, eklememiz gerekirse:
<p>text1</p><p>text2</p>
sadece metin1 görünecek
Peki buna ne dersin:
İç HTML'ye child ekleyerek özel etiket ekler ve ardından oluşturduğumuz etiketi silerek dış HTML'yi düzenler. Ne kadar akıllı olduğunu bilmiyorum ama benim için çalışıyor ya da externalHTML'yi innerHTML'ye çevirebilirsin, böylece işlev değiştirmeyi kullanmak zorunda kalmaz
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>
En kısa - 18 karakter (karıştırmayın +=
(OP ile bahsedilir) burada=
daha fazla ayrıntıyla )
test.innerHTML=str
innerHTML
dizeyi öğeye yerleştirir (tüm alt öğeleri değiştirir), oysainsertAdjacentHTML
(1) öğeden önce, (2) öğeden sonra, (3) öğenin içine ilk alt öğeden önce veya (4) son çocuktan sonra elemanın içinde.