HTML'yi bir div'e ekleme


118

Bir div içine HTML parçası eklemeye çalışıyorum. Düz JavaScript yolunun jQuery kullanmaktan daha hızlı olup olmadığını görmek istiyorum. Ne yazık ki, bunu 'eski' şekilde nasıl yapacağımı unuttum. : P

var test2 = function(){
    var cb = function(html){
        var t1 = document.getElementById("test2");
        var d = document.createElement("div");
        d.id ="oiio";
        d.innerHtml = html;
        t1.appendChild(d);
        console.timeEnd("load data with javascript");
    };
    console.time("load data with javascript");
    $.get("test1.html", cb);
}

burada neyi yanlış yapıyorum beyler?

düzenleme :
Birisi hangisinin daha hızlı, jquery veya düz js olduğunu sordu, ben de bir test yazdım:
http://jsperf.com/html-insertion-js-vs-jquery

düz js% 10 daha hızlı


Şimdi hangisi daha hızlı? düz javascript veya jquery?
Ali

3
@Ali: js daha hızlı, düzenlememe bakın.
mkoryak

Yanıtlar:


177

Sanırım istediğin bu:

document.getElementById('tag-id').innerHTML = '<ol><li>html data</li></ol>';

IE kullanılırken innerHTML'nin tüm etiket türleri için erişilebilir olmadığını unutmayın. (örneğin tablo öğeleri)


23
IE uyumluluğundan bahsettiği için +1, herkesin bunu yapmasını diliyorum!
Enrico

Harika teşekkür ederim!
user3396381

53

JQuery kullanmak, bu tarayıcı tutarsızlığını ortadan kaldıracaktır. Projenize dahil edilen jquery kitaplığı ile şunu yazın:

$('#yourDivName').html('yourtHTML');

Ayrıca şunları kullanmayı da düşünebilirsiniz:

$('#yourDivName').append('yourtHTML');

Bu, galerinizi seçilen div'deki son öğe olarak ekleyecektir. Veya:

$('#yourDivName').prepend('yourtHTML');

Bu, onu seçilen div'deki ilk öğe olarak ekleyecektir.

Bu işlevler için JQuery belgelerine bakın:


22
OP özellikle sade javascript istedi, ancak bu bana yardımcı oldu, bu yüzden hala yararlı olduğunu düşünüyorum.
doubleJ

Uzun bir Html dizesi eklenmiş bir örnek görmeye yardımcı olur. Örneğin, sunucu teknolojilerinin (php vb.) Yasaklandığı bir durumum var ve aynı sayfada yaklaşık 20 satır html'yi yeniden kullanmak istiyorum.
Jennifer Michelle

Bu kullanışlı olabilir. Teşekkürler.
arunken

40

Html'ye div eklemek için "+" (artı) kullanıyorum:

document.getElementById('idParent').innerHTML += '<div id="idChild"> content html </div>';

Umarım bu yardımcı olur.


3
+ = Cevabı için teşekkürler, bu beni çok fazla baş ağrısından kurtardı.
Michael Tunnell

1
@MichaelTunnell it really did
divine

Teşekkür ederim. AppendChild işlevi Benim için çalışmaya yoktu ama bu benim kullanım durumu için iyi çalıştı.
khwilo

Bu doğru cevap, soru nasıl ekleneceğini soruyordu, teşekkürler
OJB1

28

Alternatif olarak, insertAdjacentHTML'yi kullanabilirsiniz - ancak ben araştırıyorum ve bazı performans testleri yapıyorum - (2019.09.13 Cuma) Chrome 76.0.3809 (64-bit) üzerinde MacOs High Sierra 10.13.6, Safari 12.1.2 (13604.5.6), Firefox 69.0.0 (64 bit)). F testi sadece referans içindir - dinamik olarak html eklememiz gerektiğinden soru kapsamı dışındadır - ancak F'de bunu 'elle' yapıyorum (statik bir şekilde) - teorik olarak (bildiğim kadarıyla) bu, yeni html öğeleri eklemenin en hızlı yolu.

görüntü açıklamasını buraya girin

ÖZET

  • A innerHTML = (değil şaşırtmak ile yapmak +=en hızlı (Safari saniyede 48k işlemleri, Firefox 43k op / sn, Krom 23k op / sn) 'dir) bir ideal çözüm daha yavaş ~ 31% F yalnızca (krom ancak safari ve üzerinde firefox hızlıdır !)
  • B innerHTML +=... Tüm tarayıcılarda en yavaş (Chrome 95 op / sn, Firefox 88 op / sn, Sfari 84 op / sn)
  • D jQuery bütün tarayıcılar (Safari 14 OP / sn, ateş 11k op / sn, Krom 7k op / sn) üzerinde yavaş bir ikinci
  • Referans çözüm F (teorik olarak en hızlı) firefox ve safaride (!!!) en hızlı değil - ki bu şaşırtıcı
  • En hızlı tarayıcı Safari idi

Neden hakkında daha fazla bilgiye innerHTML =çok daha hızlı daha innerHTML +=olduğunu burada . Makinenizde / tarayıcınızda test yapabilirsiniz BURADAN


18

Ve birçok satır böyle görünebilir. Buradaki html yalnızca örnektir.

var div = document.createElement("div");

div.innerHTML =
    '<div class="slideshow-container">\n' +
    '<div class="mySlides fade">\n' +
    '<div class="numbertext">1 / 3</div>\n' +
    '<img src="image1.jpg" style="width:100%">\n' +
    '<div class="text">Caption Text</div>\n' +
    '</div>\n' +

    '<div class="mySlides fade">\n' +
    '<div class="numbertext">2 / 3</div>\n' +
    '<img src="image2.jpg" style="width:100%">\n' +
    '<div class="text">Caption Two</div>\n' +
    '</div>\n' +

    '<div class="mySlides fade">\n' +
    '<div class="numbertext">3 / 3</div>\n' +
    '<img src="image3.jpg" style="width:100%">\n' +
    '<div class="text">Caption Three</div>\n' +
    '</div>\n' +

    '<a class="prev" onclick="plusSlides(-1)">&#10094;</a>\n' +
    '<a class="next" onclick="plusSlides(1)">&#10095;</a>\n' +
    '</div>\n' +
    '<br>\n' +

    '<div style="text-align:center">\n' +
    '<span class="dot" onclick="currentSlide(1)"></span> \n' +
    '<span class="dot" onclick="currentSlide(2)"></span> \n' +
    '<span class="dot" onclick="currentSlide(3)"></span> \n' +
    '</div>\n';

document.body.appendChild(div);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.