美文网首页
document.write 和innerHtml的区别

document.write 和innerHtml的区别

作者: 海子小夜曲 | 来源:发表于2018-12-04 16:45 被阅读0次

    为什么要动态创建元素?

    提高网站的性能,降低流量的使用。

    第一种  document.write()

    当页面加载时,会产生一个输出流,这个输出流在页面加载完毕后就关闭了。

      如果在输出流关闭后执行document.write()。 document.write会开启一个新的输出流,将页面覆盖

    使用建议:使用document.write只可以在页面加载过程中

      灵活性不高,无法执行某个标签插入,只能一次

    第二种  innerHTML

    使用innerHTML动态添加某个标签内部的元素或文字.

    innerHTML的问题:设置时会覆盖原先的内容

      覆盖可以通过+=来解决

      +=的问题:

    //我们发现,使用innerHTML+=的方式添加内容时,新旧的内容中的元素已经完全不同了(尽管长得可能完全一样)可以在随便哪个标签里写

    第三种 document.createElement(“标签名”) 创建元素节点

    使用document.createElement创建的元素不存在与页面中

      如果想要使这个标签在页面中显示,我们需要将这个标签添加到页面中某一个位置

      需要结合appendChild  insertBefore使用.

    这种常用.

    也可以

    //DocumentFragment 可以看成一个标签

      //作用是,当我们将这个标签放入到页面中时,放入的是这个东西的内部子节点

    为了减少重排,可以先把元素放进DocumentFragment中,再把DocumentFragment放进body或者其他地儿里。只引发一次重排。

    DocumentFragment 可以看成一个标签(div)

    优化作用,省的添加无用标签。

    document.createDocumentFragment()

    var df = document.createDocumentFragment();

      //使用方式跟标签一样

      for (var i = 0; i < 10; i++) {

        var temp = document.createElement("span");

        df.appendChild(temp);

      }

      ////将df放入到body中,只引发一次重排

      document.body.appendChild(df);

    经过实验发现innerHTML再重复大量次数时,性能很低。

    2,我们可以间接操作

    3,适应字符串先进行拼接,然后设置给innerHTML属性,提升后�使用document。creatElement+appenChild

    console.time("innerHTML+str");

      var str = "";

      for (var i = 0; i < 500000; i++) {

        str += "<div></div>";

      }

      box.innerHTML = str;

      console.timeEnd("innerHTML+str");

    这个可以计时.

    innerHTML+str 随便填,上下一样就行

    移除节点

    父节点.removeChild(要删除的子节点)

    �不知道父节点,就先给他找到,再移除.

    box.parentNode.removeChild(box);

    相关文章

      网友评论

          本文标题:document.write 和innerHtml的区别

          本文链接:https://www.haomeiwen.com/subject/xvbmcqtx.html