当前位置:   article > 正文

JS 将字符串格式html代码插入页面中_把字符串写到界面上

把字符串写到界面上

使用原生 JS 经常会遇到将 html 字符串往页面的的某个节点插入,这里介绍几种插入方式

插入方式

一、使用 innerHTML 方式

这种方式是将你的 html 结构的字符串直接给某个节点的 innerHTML 属性:

  1. var name = 'leo';
  2. var htmlStr = `<div><span>${name}</span></div>`
  3. document.querySelector('.box').innerHTML = htmlStr;

上面的innerHTML方法是将目标元素的内部所有内容替换,不能追加和插入某个节点的前后位置。

二、使用 appendChild 或者 insertBefore 的方式

这种方式的参数必须是 node 节点。所以需要我们先将 html 字符串转换为 node 节点

将字符串格式的 html 转为 node 插入文档

一、使用 DOMParser

DOMParser 接口提供了将 XML 或 HTML 源代码从字符串解析为DOM的功能 DocumentDOMParser() 构造函数新建一个 DOMParser 对象实例,可以通过这个对象的 parseFromString() 方法将字符串解析为 DOM 对象。

DOMParser 实例的 parseFromString 方法可以用来直接将字符串转换为document 文档对象。有了document之后,我们就可以利用各种 DOM Api来进行操作了。

  1. function createDocument(txt) {
  2. const template = `<div class='child'>${txt}</div>`;
  3. let doc = new DOMParser().parseFromString(template, 'text/html');
  4. let div = doc.querySelector('.child');
  5. return div;
  6. }
  7. const container = document.getElementById('container');
  8. container.appendChild(createDocument('hello'));

二、使用 DocumentFragment

document.createRange() 返回一个 range 对象,range 对象表示文档中的连续范围区域,如用户在浏览器窗口用鼠标拖动选择的区域,利用 document.createRange().createContextualFragment 方法,我们可以直接将字符串转化为 DocumentFragment 对象

  1. var name = 'leo';
  2. var template = `<li>${name}</li>`;
  3. var frag = document.createRange().createContextualFragment(faceInfoItem);
  4. var list = document.querySelector('.box ul');
  5. //如果使用 appendChild
  6. list.appendChild(frag);
  7. //如果使用 insertBefore ,insertBefore 即使第二个参数为 null 也能插入进去,就像append了一个元素
  8. list.insertBefore(frag,list.firstElementChild);

 

利用documentFragment批量插入节点,当我们每次单独创建节点并插入文档时会造成很大的性能浪费,可以先把节点放入documentFragment 中 最后统一放入文档中。

  1. var temp = function(id){
  2. return `<li><span>now id is ${id}</span></li>`;
  3. }
  4. var createFrag = function(temp){
  5. return document.createRange().createContextualFragment(temp);
  6. }
  7. var box = document.querySelector('.box ul');
  8. var docFrag = document.createDocumentFragment();
  9. for(let i=0;i<100;i++){
  10. docFrag.appendChild(createFrag(temp(i)));
  11. }
  12. box.appendChild(docFrag);

 

利用 documentFragment 和 innerHTML 封装一个 类似于 jquery 的 append 方法,既可以插入节点,又可以插入字符串:

  1. function append(container,text){
  2. if(typeof text === 'object'){
  3. container.appendChild(text);
  4. return ;
  5. }
  6. let box = document.createElement('div');
  7. let frag = document.createDocumentFragment();
  8. box.innerHTML = text;
  9. while(box.firstElementChild){
  10. frag.appendChild(box.firstElementChild);
  11. }
  12. container.appendChild(frag);
  13. }
  14. //测试:
  15. //1.加入字符串
  16. var box = document.querySelector('.box ul');
  17. var temp = `
  18. <li>我是li3<span>6666</span></li>
  19. <li>我是li2</li>
  20. <li>我是li1</li>
  21. `;
  22. var arr = [1,22,4,5,6,6,7,8,90,'123','666666'];
  23. var lis = '';
  24. arr.forEach(item=>{
  25. lis+= `<li>${item}</li>`;
  26. })
  27. append(box,lis);
  28. //2.插入元素节点
  29. var li = document.createElement('li');
  30. li.appendChild(document.createTextNode('我是text node 节点'))
  31. append(box,lis);

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/93038
推荐阅读
相关标签
  

闽ICP备14008679号