从数组到HTML字符串的JavaScript
有人能帮我解决这个JavaScript任务吗 我必须实现一个JavaScript函数,它接受一个数组并返回生成的HTML字符串 示例:[标记名,child1,child2,…] •标记名始终是数组中的第一个条目,是一个字符串 •子项可以是数组或字符串 •如果子项是字符串,则将其视为纯文本,而不是HTML标记 •如果子元素是数组,则将其视为嵌套元素 •不支持属性、注释等,只支持元素和文本 •空标签应自动关闭 •连续文本节点合并到完成的输出中 •没有库、构建过程或传输程序 示例:从数组到HTML字符串的JavaScript,javascript,arrays,Javascript,Arrays,有人能帮我解决这个JavaScript任务吗 我必须实现一个JavaScript函数,它接受一个数组并返回生成的HTML字符串 示例:[标记名,child1,child2,…] •标记名始终是数组中的第一个条目,是一个字符串 •子项可以是数组或字符串 •如果子项是字符串,则将其视为纯文本,而不是HTML标记 •如果子元素是数组,则将其视为嵌套元素 •不支持属性、注释等,只支持元素和文本 •空标签应自动关闭 •连续文本节点合并到完成的输出中 •没有库、构建过程或传输程序 示例: ['div']
['div'] => '<div/>'
['h1', 'Text'] => '<h1>Text</h1>'
['span', 'More', 'Text'] => '<span>MoreText</span>'
['a', ['b', 'More'], ' Text'] => '<a><b>More</b> Text</a>'
['p', '<b>Text</b>'] => '<p><b>Text</b></p>'
这是到目前为止我的代码,它使用对象而不是数组。你知道怎么转换吗
var obj = {
"h1": 'text',
"a": {"b": 'more'}, // nested element
"text": '', // empty tag
"p": '<b>text</b>' // with HTML
};
var finalString = '';
function createHTML(obj){
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
if (obj[prop] == '[object Object]') {
finalString += "<" + prop + ">";
createHTML(obj[prop]);
finalString += "</" + prop + ">";
} else {
if (obj[prop] == '') {
finalString += "<" + prop + "/>";
} else {
finalString += "<" + prop + ">" + encodeURI(obj[prop]) + "</" + prop + ">";
}
}
}
}
}
createHTML(obj);
console.log(finalString);
// "<h1>text</h1><a><b>more</b></a><text/><p>%3Cb%3Etext%3C/b%3E</p>"
您可以使用一些递归方法: 通过生成DOM元素对象: 函数genMarkuparr{ //使用第一个数组项创建dom元素对象 var ele=document.createElementarr[0]; //迭代剩余的元素 arr.slice1.forEachfunctionv{ //如果项是数组,则递归调用该函数 //并附加返回的元素 if Array.isArrayv ele.childgenmarkupv; //否则生成一个文本节点并追加 其他的 ele.appendChilddocument.createTextNodev; } //返回元素引用 返回ele; } [['div'],['h1','Text'],['span','More','Text'],['a',['b','More'],'Text'],['p','Text']。forEachfunctiond{ //获取outerHTML属性以获取html内容 console.logJSON.stringifyd+'=>'+genMarkupd.outerHTML;
}欢迎来到StackOverflow,请发布您尝试过的代码。欢迎来到SO。因此,这不是编码服务。请将您尝试过的代码以及可能遇到的问题添加到您的问题中。欢迎使用堆栈溢出!请阅读并通读,尤其是做你的研究,了解与SO相关的主题,以及。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会乐意帮忙的。祝你好运您需要对对象进行类型检查,然后使用该对象作为结果调用该函数,例如,如果同一个函数的递归调用具有不同参数,那么typeof obj[prop]==='object'{finalstring+=createHTMLobj[prop];}。这是一个奇妙的解决方案,非常聪明。非常感谢你@arthuruk:很高兴提供帮助:很好的解决方案+1为了遵守规范,我将添加.outerHTML.replace//,转换为