最近在去除系统中的jquery的时候,发现有个地方使用jquery将字符串变成了dom节点,然后插入到了body标签中。现在,我需要使用原生JS完成这项功能。

解决方案

先创建一个dom元素,将字符串以HTML的形式插入到dom节点中,然后导出dom元素的子节点。

// 返回元素列表
function parseDom(arg) {
    const objE = document.createElement('form');
    objE.innerHTML = arg;
    return objE.childNodes;
}

需要注意的是,这个方法导出的是一个dom节点的列表(数组),所以想要获取指定元素,需要使用数组取值的方法获取。

例如:

const inputString = '<input />';
const inputElement = parseDom(inputString)[0];

当然,如果你的使用场景只有可能是插入一项元素,那么你完全可以让 parseDom 在导出的时候直接返回元素列表的第一项。

// 只返回一项元素
function parseDom(arg) {
    const objE = document.createElement('form');
    objE.innerHTML = arg;
    return objE.childNodes[0];
}

OK,到这里已经完成了功能的一半了,剩下的一半是将dom节点插入到body中。查看有几种方式可以插入dom节点以及它们的区别参考这篇博客:原生JS向body尾部插入dom节点.

参考链接

  1. js 字符串转dom 和dom 转字符串.