Вставка HTML в div

118

Я пытаюсь вставить кусок HTML в div. Я хочу узнать, работает ли простой JavaScript быстрее, чем использование jQuery. К сожалению, я забыл, как это сделать «по-старому». :П

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% быстрее

mkoryak
источник
Какой из них быстрее? простой javascript или jquery?
Али
3
@Ali: js быстрее, см. Мое редактирование.
mkoryak

Ответы:

177

Думаю, это то, что вам нужно:

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

Имейте в виду, что innerHTML доступен не для всех типов тегов при использовании IE. (например, элементы таблицы)

Натан
источник
23
+1 за упоминание совместимости с IE, желаю всем этого!
Энрико
Отлично, спасибо!
user3396381
53

Использование JQuery устранит эту несогласованность в браузере. С библиотекой jquery, включенной в ваш проект, просто напишите:

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

Вы также можете использовать:

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

Это добавит вашу галерею в качестве последнего элемента в выбранном div. Или:

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

Это добавит его как первый элемент в выбранном div.

См. Документацию JQuery для этих функций:

designerdre101
источник
22
OP специально попросил простой javascript, но это помогло мне, поэтому я все еще считаю его полезным.
doubleJ
Помогло бы увидеть пример с вставленной длинной строкой Html. Например, у меня есть случай, когда серверные технологии (php и т. Д.) Запрещены, и я хочу повторно использовать около 20 строк HTML на одной странице.
Дженнифер Мишель
Это может пригодиться. Спасибо.
arunken
40

Я использую "+" (плюс), чтобы вставить div в html:

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

Надеюсь на эту помощь.

Йосеп Тито
источник
3
Спасибо за ответ + =, который избавил меня от многих головных болей.
Майкл Таннелл,
1
@MichaelTunnell это действительно так
божественный
Спасибо. Функция appendChild у меня не сработала, но она хорошо сработала для моего варианта использования.
khwilo
Это правильный ответ, вопрос был в том, как вставить, спасибо
OJB1
28

В качестве альтернативы вы можете использовать insertAdjacentHTML - однако я копаюсь и делаю некоторые тесты производительности - (2019.09.13, пятница) MacOs High Sierra 10.13.6 в Chrome 76.0.3809 (64-разрядная версия), Safari 12.1.2 (13604.5.6), Firefox 69.0.0 (64-разрядная версия)). Тест F предназначен только для справки - он выходит за рамки вопроса, потому что нам нужно динамически вставлять html - но в F я делаю это «вручную» (статическим способом) - теоретически (насколько я знаю) это должен быть самый быстрый способ вставки новых элементов HTML.

введите описание изображения здесь

РЕЗЮМЕ

  • (Не путать с ) является самым быстрым (Safari 48К операций в секунду, Firefox 43Кб оп / сек, Chrome 23k оп / сек) составляет ~ 31% медленнее , чем идеальное решение F только хром , но на сафари и Firefox быстрее ( !) innerHTML =+=
  • B innerHTML +=... является самым медленным во всех браузерах (Chrome 95 оп / сек, Firefox 88 оп / сек, Sfari 84 оп / сек)
  • D JQuery является второй медленно во всех браузерах (Safari 14 оп / сек, Firefox 11k оп / сек, Chrome 7k оп / сек)
  • Эталонное решение 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);
атом
источник