javascript - 如何将此 jQuery 代码转换为 vanilla Javascript?
问题描述
我正在尝试将此 jquery 代码转换为 vanilla javascript。实际上,此代码正在ul
li
使用此 json 数据动态构建嵌套。任何人都可以帮助我吗?
这是我的代码
var tree = [
{
name: 'Vegetables',
children: [
{
name: 'Green',
children: [
{
name: 'Broccoli',
children: [{ name: 'Broccoli-sub1' }, { name: 'Broccoli-sub2' }],
},
{ name: 'cabbage' },
{ name: 'Brussels' },
],
},
{
name: 'Orange',
children: [{ name: 'Pumpkins' }, { name: 'Carrots' }],
},
],
},
];
function recursive_tree(data, tag, child_wrapper, level) {
var html = [];
//return html array;
level = level || 0;
child_wrapper = child_wrapper != false ? child_wrapper : 'ul';
$.each(data, function (i, obj) {
var el = $('<' + tag + '>');
el.html(obj.name);
if (obj.hasOwnProperty('children')) {
var wrapper = $('<' + child_wrapper + '>');
var els = recursive_tree(obj.children, tag, child_wrapper);
wrapper.append(els);
wrapper.appendTo(el);
}
html.push(el);
});
return html;
}
var html = recursive_tree(tree, 'li', 'ul');
console.log(html);
$('#parent').append(html);
`enter code here`;
解决方案
有很多方法可以做到这一点。这是一种生成内部html的方法
var tree = [{
"name": 'Vegetables',
"children": [{
"name": 'Green',
"children": [{
"name": 'Broccoli',
"children": [{
"name": "Broccoli-sub1"
},
{
"name": "Broccoli-sub2"
}
]
},
{
"name": "cabbage"
},
{
"name": 'Brussels'
},
]
},
{
"name": 'Orange',
"children": [{
"name": 'Pumpkins'
},
{
"name": 'Carrots'
},
]
},
]
}]
function recursive_tree(data, tag, child_wrapper, level) {
let html = [];
//return html array;
level = level || 0;
child_wrapper = !child_wrapper ? child_wrapper : 'ul';
data.forEach(obj => {
html.push(`<${tag}>${obj.name}`);
if (obj.hasOwnProperty('children')) {
html.push(`<${child_wrapper}>`);
html = html.concat(recursive_tree(obj.children, tag, child_wrapper))
html.push(`</${child_wrapper}>`);
}
html.push(`</${tag}>`);
});
return html;
}
var html = recursive_tree(tree, 'li', 'ul');
console.log(html);
const parent = document.getElementById('parent');
parent.innerHTML += html.join("");
<div id="parent"></div>
推荐阅读
- sql-server - 基于初始“Use dB”语句的复杂SQL查询性能差异较大
- angular - 通过具有角度反应形式的 setValue() 方法选择默认选择选项
- postgresql - Postgres:如何有效地对以下随机事件 id 进行分桶(小时、config_id、sensor_id)
- javascript - 循环时是否会并行执行 await 调用?
- pandas - 在数据框组内进行 Winsorize
- django - 将文件发布到没有页眉/页脚的 Django REST 框架
- ruby-on-rails - “saml_idp”gem 设置失败
- delphi - 为什么上传的照片比保存的小很多 - Delphi 10.3.2, firemonkey
- javascript - 将模型从剃刀传递到 javascript - 非常奇怪的错误
- swift - 如何通过 swift 以编程方式使用系统功能?