将HTML插入div


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?
阿里

3
@Ali:js更快,请参见我的编辑。
mkoryak

Answers:


176

我认为这是您想要的:

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

请记住,使用IE时无法访问所有类型的标签的innerHTML。(例如表元素)


23
+1提及IE的兼容性,祝大家做到这一点!
Enrico

太好了谢谢!
user3396381

53

使用JQuery可以解决浏览器不一致的问题。使用项目中包含的jquery库,只需编写:

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

您也可以考虑使用:

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

这会将您的图库添加为所选div中的最后一项。要么:

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

这会将其添加为所选div中的第一项。

有关这些功能,请参见JQuery文档:


22
OP专门要求使用纯JavaScript,但这对我有所帮助,因此我仍然认为它很有用。
doubleJ 2012年

有助于查看示例,其中插入了很长的HTML字符串。例如,我有一种情况,其中不允许使用服务器技术(例如php等),并且我想在同一页面内重复使用约20行html。
詹妮弗·米歇尔

这可能派上用场。谢谢。
失灵

40

我使用“ +”(加号)将div插入html:

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

希望能有所帮助。


3
感谢您的+ =答案,这使我省去了很多麻烦。
Michael Tunnell

1
@MichaelTunnell它确实做到了
神圣的

谢谢。在使用appendChild功能并没有为我工作,但这个工作以及我的使用情况。
khwilo19年

这是正确的答案,问题是询问如何插入,谢谢
OJB1

28

作为替代方案,您可以使用insertAdjacentHTML-但我深入研究并进行了一些性能测试-(2019.09.13 Friday)Chrome 76.0.3809(64位),Safari 12.1.2(13604.5.6)上的MacOs High Sierra 10.13.6, Firefox 69.0.0(64位))。测试F仅供参考-由于我们需要动态插入html,因此不在问题范围内-但在F中,我是通过“手动”操作(以静态方式)-理论上(据我所知)这应该是插入新html元素的最快方法。

在此处输入图片说明

摘要

  • innerHTML =(不要混淆+=)是最快的(野生每秒48K操作,火狐43K运算/秒,铬23K运算/秒)的是〜31%速度低于理想的解决方案˚F仅铬,但是,Safari和Firefox更快( !)
  • innerHTML +=...是最慢的所有浏览器(浏览器95的运算/秒,火狐88运算/秒,Sfari 84运算/秒)
  • 在所有浏览器中,D jQuery的速度都排名第二(Safari 14 op / sec,Firefox 11k op / sec,Chrome 7k op / sec)
  • 参考解决方案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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.