美文网首页
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