divへのHTMLの挿入


118

HTMLのチャンクをdivに挿入しようとしています。単純なJavaScriptの方法がjQueryを使用するよりも速いかどうかを確認したいと思います。残念ながら、私はそれを「古い」方法で行う方法を忘れていました。: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);
}

私はここで何を間違っているのですか?

編集
誰かがjqueryまたはプレーンjsのどちらが速いかを尋ねたので、テストを書きました:http :
//jsperf.com/html-insertion-js-vs-jquery

プレーンjsは10%高速です


どっちが速い?プレーンjavascriptまたはjquery?
2013

3
@アリ:jsはより高速です、私の編集を参照してください。
mkoryak 2013

回答:


176

私はこれがあなたが望むものだと思います:

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

IEを使用する場合、innerHTMLはすべてのタイプのタグにアクセスできるわけではないことに注意してください。(テーブル要素など)


23
IEの互換性について言及するための+1、誰もがこれをしたいのですが!
Enrico

よかった。ありがとう!
user3396381

53

JQueryを使用すると、ブラウザーの不整合が処理されます。プロジェクトに含まれているjqueryライブラリを使用して、次のように記述します。

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

次の使用も検討できます。

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

これにより、選択したdivの最後のアイテムとしてギャラリーが追加されます。または:

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

これにより、選択したdivの最初のアイテムとして追加されます。

これらの関数については、JQueryのドキュメントを参照してください。


22
OPは特にプレーンなJavaScriptを要求しましたが、これは私に役立ちました。
doubleJ

Htmlの長い文字列が挿入された例を確認するのに役立ちます。たとえば、サーバーテクノロジ(phpなど)が許可されないケースがあり、同じページ内で約20行のhtmlを再利用したいと考えています。
ジェニファーミシェル

これは役に立ちます。ありがとう。
荒廃

40

「+」(プラス)を使用してdivをhtmlに挿入します。

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

この助けを願っています。


3
+ =の回答をありがとう、それは私に多くの頭痛を救った。
Michael Tunnell 2016

1
@MichaelTunnellそれは本当にしました
神聖な

ありがとうございました。appendChildの機能は私のために仕事をしませんでしたが、これは私のユースケースのためによく働きました。
khwilo

これは正解です。質問は挿入方法を尋ねていたものです。ありがとう
OJB1

28

別の方法として、insertAdjacentHTMLを使用できます。ただし、掘り下げてパフォーマンステストを行います-(2019.09.13金曜日)MacOs High Sierra 10.13.6 on Chrome 76.0.3809(64ビット)、Safari 12.1.2(13604.5.6)、 Firefox 69.0.0(64ビット))。テストFは参照用です-動的にhtmlを挿入する必要があるため、問題の範囲外ですが、Fでは「手動」で(静的な方法で)行います-理論的には(私が知る限り)これは新しいHTML要素を挿入する最速の方法。

ここに画像の説明を入力してください

概要

  • Aは、 innerHTML =(でない混同ん+=)最速(毎秒サファリ48Kの操作、Firefoxの43K OP /秒、クローム23K OP /秒)であるAは、〜31%遅くなる理想的なソリューションよりもFは Chromeのみが、SafariとFirefoxの上で速く(あります!)
  • Bは、 innerHTML +=...すべてのブラウザ(クローム95 OP /秒、Firefoxの88 OP /秒、Sfari 84 OP /秒)で最も遅いです
  • D jQueryのは、すべてのブラウザ(Safariの14 OP /秒、Firefoxの11K OP /秒、クロム7K OP /秒)に遅い秒
  • 参照ソリューションF(理論上最速)は、FirefoxとSafari(!!!)では最速ではありません-これは驚くべきことです
  • 最速のブラウザはSafariでした

理由の詳細については、こちらinnerHTML =よりもはるかに高速ですここでマシン/ブラウザでテストを実行できますinnerHTML +=


18

そして、多くの行はこのようになります。ここのhtmlはサンプルです。

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);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.